diff --git a/specs/latest/open-api3-latest.json b/specs/latest/open-api3-latest.json index 653d8e956..ab2c57252 100644 --- a/specs/latest/open-api3-latest.json +++ b/specs/latest/open-api3-latest.json @@ -4542,6 +4542,19 @@ "Session": [], "JWT": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] }, "delete": { @@ -4550,7 +4563,7 @@ "tags": [ "account" ], - "description": "Delete all sessions from the user account and remove any sessions cookies from the end client.", + "description": "Delete all sessions from the user account and remove any sessions cookies from the end client. Pass `current` as false to keep the session making the request and sign out of every other session.", "responses": { "204": { "description": "No content" @@ -4590,6 +4603,19 @@ "Session": [], "JWT": [] } + ], + "parameters": [ + { + "name": "current", + "description": "Delete the current session too. Use false to sign out of every other session while staying signed in on this one.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -4657,7 +4683,7 @@ "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.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).", + "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. Use the optional `duration` parameter to create a shorter session, for example when the user doesn't choose \"remember me\". It must be at least 60 seconds and cannot exceed the project maximum session length.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).", "responses": { "201": { "description": "Session", @@ -4722,6 +4748,13 @@ "type": "string", "example": "password", "format": "password" + }, + "duration": { + "description": "Session length in seconds. Minimum is 60 seconds, and it cannot exceed the project maximum session length. Defaults to the project maximum session length.", + "type": "integer", + "example": 60, + "format": "int32", + "nullable": true } }, "required": [ @@ -4998,7 +5031,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, appwrite, auth0, authentik, autodesk, bitbucket, bitly, box, cloudflare, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, fusionauth, github, gitlab, google, huggingface, kakao, keycloak, kick, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, resend, salesforce, slack, spotify, stripe, tiktok, tradeshift, tradeshiftBox, twitch, wordpress, x, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, appwrite, auth0, authentik, autodesk, bitbucket, bitly, box, cloudflare, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, fusionauth, github, gitlab, google, huggingface, kakao, keycloak, kick, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, resend, salesforce, slack, spotify, stripe, tiktok, tradeshift, tradeshiftBox, twitch, webflow, wordpress, x, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -5299,6 +5332,13 @@ ], "title": "twitch" }, + { + "type": "string", + "enum": [ + "webflow" + ], + "title": "webflow" + }, { "type": "string", "enum": [ @@ -6284,7 +6324,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, appwrite, auth0, authentik, autodesk, bitbucket, bitly, box, cloudflare, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, fusionauth, github, gitlab, google, huggingface, kakao, keycloak, kick, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, resend, salesforce, slack, spotify, stripe, tiktok, tradeshift, tradeshiftBox, twitch, wordpress, x, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, appwrite, auth0, authentik, autodesk, bitbucket, bitly, box, cloudflare, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, fusionauth, github, gitlab, google, huggingface, kakao, keycloak, kick, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, resend, salesforce, slack, spotify, stripe, tiktok, tradeshift, tradeshiftBox, twitch, webflow, wordpress, x, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -6585,6 +6625,13 @@ ], "title": "twitch" }, + { + "type": "string", + "enum": [ + "webflow" + ], + "title": "webflow" + }, { "type": "string", "enum": [ @@ -7952,6 +7999,931 @@ } } }, + "\/analytics\/properties": { + "get": { + "summary": "List analytics properties", + "operationId": "analyticsListProperties", + "tags": [ + "analytics" + ], + "description": "List analytics properties for the current project.", + "responses": { + "200": { + "description": "Analytics properties list", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/analyticsPropertyList" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "properties", + "demo": "analytics\/list-properties.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "analytics.read", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "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\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, domain, timezone, enabled, public, snippetId", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "in": "query" + }, + { + "name": "search", + "description": "Search term to filter your list results. Matches the property ID, name and domain. Max length: 256 chars.", + "required": false, + "schema": { + "type": "string", + "example": "", + "default": "" + }, + "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } + ] + }, + "post": { + "summary": "Create analytics property", + "operationId": "analyticsCreateProperty", + "tags": [ + "analytics" + ], + "description": "Create a new analytics property to track a website or application.", + "responses": { + "201": { + "description": "AnalyticsProperty", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/analyticsProperty" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "properties", + "demo": "analytics\/create-property.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "analytics.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "propertyId": { + "description": "Unique ID. Choose a custom ID or generate a random ID with `ID.unique()`. Max length is 36 chars.", + "type": "string", + "example": "" + }, + "name": { + "description": "Human-readable name for this property.", + "type": "string", + "example": "" + }, + "domain": { + "description": "Primary domain to track (e.g. example.com). Optional for native apps.", + "type": "string", + "default": "", + "example": "" + }, + "timezone": { + "description": "IANA timezone used for daily boundaries.", + "type": "string", + "default": "UTC", + "example": "" + }, + "enabled": { + "description": "Whether tracking is enabled.", + "type": "boolean", + "default": true, + "example": false + }, + "public": { + "description": "Whether stats are publicly viewable.", + "type": "boolean", + "default": false, + "example": false + }, + "allowedOrigins": { + "description": "Allowed origins for tracking. Use [\"*\"] to allow all.", + "type": "array", + "default": [ + "*" + ], + "items": { + "type": "string" + } + } + }, + "required": [ + "propertyId", + "name" + ] + } + } + } + } + } + }, + "\/analytics\/properties\/{propertyId}": { + "get": { + "summary": "Get analytics property", + "operationId": "analyticsGetProperty", + "tags": [ + "analytics" + ], + "description": "Get an analytics property by ID.", + "responses": { + "200": { + "description": "AnalyticsProperty", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/analyticsProperty" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "properties", + "demo": "analytics\/get-property.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "analytics.read", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "propertyId", + "description": "Analytics property unique ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ] + }, + "patch": { + "summary": "Update analytics property", + "operationId": "analyticsUpdateProperty", + "tags": [ + "analytics" + ], + "description": "Update an analytics property. Only the attributes you pass are changed; omitted attributes keep their current value.", + "responses": { + "200": { + "description": "AnalyticsProperty", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/analyticsProperty" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "properties", + "demo": "analytics\/update-property.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "analytics.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "propertyId", + "description": "Analytics property unique ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "description": "Human-readable name for this property.", + "type": "string", + "example": "", + "nullable": true + }, + "domain": { + "description": "Primary domain to track (e.g. example.com). Pass an empty string to clear it.", + "type": "string", + "example": "", + "nullable": true + }, + "timezone": { + "description": "IANA timezone used for daily boundaries.", + "type": "string", + "example": "", + "nullable": true + }, + "enabled": { + "description": "Whether tracking is enabled.", + "type": "boolean", + "example": false, + "nullable": true + }, + "public": { + "description": "Whether stats are publicly viewable.", + "type": "boolean", + "example": false, + "nullable": true + }, + "allowedOrigins": { + "description": "Allowed origins for tracking. Use [\"*\"] to allow all.", + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete analytics property", + "operationId": "analyticsDeleteProperty", + "tags": [ + "analytics" + ], + "description": "Delete an analytics property along with every event and session collected for it. This cannot be undone.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "properties", + "demo": "analytics\/delete-property.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "analytics.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "propertyId", + "description": "Analytics property unique ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ] + } + }, + "\/analytics\/properties\/{propertyId}\/events": { + "post": { + "summary": "Track analytics event", + "operationId": "analyticsCreateEvent", + "tags": [ + "analytics" + ], + "description": "Send a tracking event from a browser, native app, or server-side SDK.", + "responses": { + "202": { + "description": "File", + "content": { + "application\/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "events", + "demo": "analytics\/create-event.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": [ + "public", + "global" + ], + "platforms": [ + "client", + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "client": { + "Project": [] + }, + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "propertyId", + "description": "Analytics property ID or snippet ID identifying the property.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "description": "Event name. \"pageview\" is just a conventional event name; events are not modeled specially.", + "type": "string", + "example": "" + }, + "url": { + "description": "Full page URL or screen identifier.", + "type": "string", + "example": "https:\/\/example.com", + "format": "url" + }, + "domain": { + "description": "Hostname (e.g. example.com).", + "type": "string", + "default": "", + "example": "" + }, + "referrer": { + "description": "Referrer URL.", + "type": "string", + "default": "", + "example": "" + }, + "screenWidth": { + "description": "Viewport width in CSS pixels.", + "type": "integer", + "default": 0, + "format": "int32" + }, + "sessionHash": { + "description": "Optional session hash (provided by SDK).", + "type": "string", + "default": "", + "example": "" + }, + "scrollDepth": { + "description": "Scroll depth percentage 0-100.", + "type": "integer", + "default": 0, + "example": 0, + "format": "int32" + }, + "engagementTime": { + "description": "Engagement time in seconds.", + "type": "integer", + "default": 0, + "format": "int32" + }, + "props": { + "description": "Custom string properties as a flat key=value list (max 32 entries, alternating key,value).", + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "userId": { + "description": "Override user ID. Requires API-key auth with analytics.write scope.", + "type": "string", + "default": "", + "example": "" + }, + "ip": { + "description": "Override IP address. Requires API-key auth with analytics.write scope.", + "type": "string", + "default": "", + "example": "" + }, + "userAgent": { + "description": "Override user agent. Requires API-key auth with analytics.write scope.", + "type": "string", + "default": "", + "example": "" + } + }, + "required": [ + "name", + "url" + ] + } + } + } + } + } + }, + "\/analytics\/properties\/{propertyId}\/metrics": { + "get": { + "summary": "List analytics metrics for a property", + "operationId": "analyticsListMetrics", + "tags": [ + "analytics" + ], + "description": "Read analytics metrics (visitors, sessions, pageviews, events, bounceRate, \u2026) for a property over a date range.\n\n**Three response shapes**, chosen by `dimensions[]` and `interval`:\n- Neither: one row aggregating the whole window, with `value` and `date` null. Only this shape carries `pageviews`, `visits`, `bounceRate`, `visitDuration`, `viewsPerVisit`, `scrollDepth` and `engagementTime`.\n- `dimensions[]`: one row per dimension value, ranked by visitors, with `value` set and `date` null.\n- `interval`: one row per time bucket in chronological order, with `date` set and `value` null.\n\nCombining `dimensions[]` with `interval` is not supported yet. `queries[]` filters the underlying events using standard Utopia query syntax.", + "responses": { + "200": { + "description": "AnalyticsMetricList", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/analyticsMetricList" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "metrics", + "demo": "analytics\/list-metrics.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "analytics.read", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "propertyId", + "description": "Analytics property unique ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + }, + { + "name": "queries", + "description": "Up to 10 filter queries in Utopia syntax. Allowed attributes: country, region, city, browser, operatingSystem, device, screenSize, referrerSource, channel, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, page, hostname, botName, botCategory, eventName. page, eventName are only accepted alongside `interval`, or with a breakdown on a dimension other than entryPage, exitPage. Allowed methods: equal, notEqual, contains, startsWith, endsWith. Example: `queries[]=equal(\"country\", [\"US\"])`.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "in": "query" + }, + { + "name": "interval", + "description": "Time bucket size. Omit (null) for a flat aggregate over the whole window. Allowed: 1h, 1d, 1w, 1m.", + "required": false, + "schema": { + "type": "string", + "example": "1h", + "title": "AnalyticsInterval", + "oneOf": [ + { + "type": "string", + "enum": [ + "1h" + ], + "title": "One Hour" + }, + { + "type": "string", + "enum": [ + "1d" + ], + "title": "One Day" + }, + { + "type": "string", + "enum": [ + "1w" + ], + "title": "One Week" + }, + { + "type": "string", + "enum": [ + "1m" + ], + "title": "One Month" + } + ] + }, + "in": "query" + }, + { + "name": "dimensions", + "description": "Dimension to break the metrics down by. One at most for now; the parameter is a list so that cap can be raised without a breaking change. Allowed: country, region, city, browser, operatingSystem, device, screenSize, referrerSource, channel, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, page, hostname, entryPage, exitPage, trafficType, botName, botCategory, eventName.", + "required": false, + "schema": { + "type": "array", + "items": { + "title": "AnalyticsDimension", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "country" + ], + "title": "country" + }, + { + "type": "string", + "enum": [ + "region" + ], + "title": "region" + }, + { + "type": "string", + "enum": [ + "city" + ], + "title": "city" + }, + { + "type": "string", + "enum": [ + "browser" + ], + "title": "browser" + }, + { + "type": "string", + "enum": [ + "operatingSystem" + ], + "title": "operatingSystem" + }, + { + "type": "string", + "enum": [ + "device" + ], + "title": "device" + }, + { + "type": "string", + "enum": [ + "screenSize" + ], + "title": "screenSize" + }, + { + "type": "string", + "enum": [ + "referrerSource" + ], + "title": "referrerSource" + }, + { + "type": "string", + "enum": [ + "channel" + ], + "title": "channel" + }, + { + "type": "string", + "enum": [ + "utmSource" + ], + "title": "utmSource" + }, + { + "type": "string", + "enum": [ + "utmMedium" + ], + "title": "utmMedium" + }, + { + "type": "string", + "enum": [ + "utmCampaign" + ], + "title": "utmCampaign" + }, + { + "type": "string", + "enum": [ + "utmContent" + ], + "title": "utmContent" + }, + { + "type": "string", + "enum": [ + "utmTerm" + ], + "title": "utmTerm" + }, + { + "type": "string", + "enum": [ + "page" + ], + "title": "page" + }, + { + "type": "string", + "enum": [ + "hostname" + ], + "title": "hostname" + }, + { + "type": "string", + "enum": [ + "entryPage" + ], + "title": "entryPage" + }, + { + "type": "string", + "enum": [ + "exitPage" + ], + "title": "exitPage" + }, + { + "type": "string", + "enum": [ + "trafficType" + ], + "title": "trafficType" + }, + { + "type": "string", + "enum": [ + "botName" + ], + "title": "botName" + }, + { + "type": "string", + "enum": [ + "botCategory" + ], + "title": "botCategory" + }, + { + "type": "string", + "enum": [ + "eventName" + ], + "title": "eventName" + } + ] + }, + "default": [] + }, + "in": "query" + }, + { + "name": "dateRange", + "description": "Date range shorthand (e.g. 7d, 30d). Ignored for any bound you supply explicitly via startAt\/endAt.", + "required": false, + "schema": { + "type": "string", + "example": "", + "default": "30d" + }, + "in": "query" + }, + { + "name": "startAt", + "description": "Explicit window start in ISO 8601. Defaults to endAt minus dateRange.", + "required": false, + "schema": { + "type": "string", + "format": "datetime", + "example": "2020-10-15T06:38:00.000+00:00", + "default": "" + }, + "in": "query" + }, + { + "name": "endAt", + "description": "Explicit window end in ISO 8601. Defaults to the current time.", + "required": false, + "schema": { + "type": "string", + "format": "datetime", + "example": "2020-10-15T06:38:00.000+00:00", + "default": "" + }, + "in": "query" + }, + { + "name": "limit", + "description": "Maximum number of ranked values to return.", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "example": 1, + "default": 100 + }, + "in": "query" + } + ] + } + }, "\/apps": { "get": { "summary": "List Applications", @@ -12147,7 +13119,7 @@ "tags": [ "avatars" ], - "description": "Returns the best available profile photo for a user. The endpoint tries each source in priority order and returns the first successful result: OAuth2 identity photo, Gravatar, Libravatar, Appwrite Initials, built-in static fallback.\n\nPassing `userId` \u2014 `current()` for the authenticated user \u2014 resolves the photo from everything known about that user: identity photos, email, and name. An explicit `emailHash` or `name` then overrides just that value, and the user's remaining sources stay in the chain. Without `userId`, passing `emailHash` and\/or `name` resolves the avatar from those values alone: the hash is looked up on Gravatar and Libravatar, the name is rendered as initials, and the session user stays out of the chain so their own photo never shadows the avatar being asked for. When nothing is passed, the photo resolves for the currently authenticated user. Emails are only ever accepted pre-hashed, so no address ends up in a URL.", + "description": "Returns the best available profile photo for a user. The endpoint tries each source in priority order and returns the first successful result: a custom uploaded photo (see avatars.updatePhoto), OAuth2 identity photo, Gravatar, Libravatar, Appwrite Initials, built-in static fallback.\n\nPassing `userId` \u2014 `current()` for the authenticated user \u2014 resolves the photo from everything known about that user: identity photos, email, and name. An explicit `emailHash` or `name` then overrides just that value, and the user's remaining sources stay in the chain. Without `userId`, passing `emailHash` and\/or `name` resolves the avatar from those values alone: the hash is looked up on Gravatar and Libravatar, the name is rendered as initials, and the session user stays out of the chain so their own photo never shadows the avatar being asked for. When nothing is passed, the photo resolves for the currently authenticated user. Emails are only ever accepted pre-hashed, so no address ends up in a URL.", "responses": { "200": { "description": "Image", @@ -12300,6 +13272,128 @@ "in": "query" } ] + }, + "put": { + "summary": "Update photo", + "operationId": "avatarsUpdatePhoto", + "tags": [ + "avatars" + ], + "description": "Update the profile photo of the currently authenticated user. The uploaded image takes priority over every other photo source, including OAuth2 identity photos, Gravatar, and Libravatar. Updating an already customized photo replaces it. The image must be at most 5MB and is sent in a single request.", + "responses": { + "200": { + "description": "Account", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/account" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": null, + "demo": "avatars\/update-photo.md", + "rate-limit": 60, + "rate-time": 60, + "rate-key": "ip:{ip},method:{method},url:{url},userId:{userId}", + "scope": "avatars.write", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "requestBody": { + "content": { + "multipart\/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "Binary image file of at most 5MB. Allowed file types are png, jpg, jpeg, and webp.", + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + } + } + }, + "delete": { + "summary": "Delete photo", + "operationId": "avatarsDeletePhoto", + "tags": [ + "avatars" + ], + "description": "Delete the profile photo of the currently authenticated user and store the built-in static placeholder in its place. The placeholder is the user's photo from then on, so it takes priority over every other photo source \u2014 OAuth2 identity photos, Gravatar, Libravatar, and initials \u2014 until a new photo is uploaded with avatars.updatePhoto.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": null, + "demo": "avatars\/delete-photo.md", + "rate-limit": 60, + "rate-time": 60, + "rate-key": "ip:{ip},method:{method},url:{url},userId:{userId}", + "scope": "avatars.write", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ] } }, "\/avatars\/qr": { @@ -12499,14 +13593,13 @@ }, { "name": "headers", - "description": "HTTP headers to send with the browser request. Defaults to empty.", + "description": "HTTP headers to send with the browser request. Only Accept and Accept-Language are allowed. Defaults to empty.", "required": false, "schema": { "type": "object", "default": {}, "example": { - "Authorization": "Bearer token123", - "X-Custom-Header": "value" + "Accept-Language": "en-US,en;q=0.9" } }, "in": "query" @@ -17226,6 +18319,19 @@ { "Project": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -17685,6 +18791,19 @@ { "Project": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -17731,6 +18850,19 @@ { "Project": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -18693,6 +19825,13 @@ ], "title": "transaction_logs" }, + { + "type": "string", + "enum": [ + "analyticsproperties" + ], + "title": "analytics_properties" + }, { "type": "string", "enum": [ @@ -20211,6 +21350,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] }, @@ -20456,6 +21606,20 @@ "example": false } } + }, + "examples": { + "commit": { + "summary": "Commit the transaction", + "value": { + "commit": true + } + }, + "rollback": { + "summary": "Roll back the transaction", + "value": { + "rollback": true + } + } } } } @@ -20625,6 +21789,24 @@ } } } + }, + "examples": { + "createDocument": { + "summary": "Stage a document creation", + "value": { + "operations": [ + { + "action": "create", + "databaseId": "", + "collectionId": "", + "documentId": "", + "data": { + "username": "walter.obrien" + } + } + ] + } + } } } } @@ -27040,6 +28222,16 @@ "description": "Array of documents data as JSON objects.", "type": "array", "default": [], + "example": [ + { + "$id": "example1", + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + ], "items": { "type": "object" } @@ -27188,6 +28380,16 @@ "documents": { "description": "Array of document data as JSON objects. May contain partial documents.", "type": "array", + "example": [ + { + "$id": "example1", + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + ], "items": { "type": "object" } @@ -27315,6 +28517,19 @@ "nullable": true } } + }, + "examples": { + "updateSelected": { + "summary": "Update explicitly selected documents", + "value": { + "data": { + "username": "walter.obrien" + }, + "queries": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"\"]}" + ] + } + } } } } @@ -27403,6 +28618,9 @@ "items": { "type": "string" }, + "example": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"\"]}" + ], "default": [] }, "in": "query" @@ -27713,6 +28931,20 @@ "nullable": true } } + }, + "examples": { + "upsert": { + "summary": "Create or update document data", + "value": { + "data": { + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + } + } } } } @@ -27845,6 +29077,16 @@ "nullable": true } } + }, + "examples": { + "update": { + "summary": "Update document data", + "value": { + "data": { + "username": "walter.obrien" + } + } + } } } } @@ -28442,6 +29684,9 @@ "attributes": { "description": "Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.", "type": "array", + "example": [ + "username" + ], "items": { "type": "string" } @@ -28957,6 +30202,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] }, @@ -29190,6 +30446,20 @@ "example": false } } + }, + "examples": { + "commit": { + "summary": "Commit the transaction", + "value": { + "commit": true + } + }, + "rollback": { + "summary": "Roll back the transaction", + "value": { + "rollback": true + } + } } } } @@ -29347,6 +30617,24 @@ } } } + }, + "examples": { + "createDocument": { + "summary": "Stage a document creation", + "value": { + "operations": [ + { + "action": "create", + "databaseId": "", + "collectionId": "", + "documentId": "", + "data": { + "username": "walter.obrien" + } + } + ] + } + } } } } @@ -30389,6 +31677,16 @@ "description": "Array of documents data as JSON objects.", "type": "array", "default": [], + "example": [ + { + "$id": "example1", + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + ], "items": { "type": "object" } @@ -30528,6 +31826,16 @@ "documents": { "description": "Array of document data as JSON objects. May contain partial documents.", "type": "array", + "example": [ + { + "$id": "example1", + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + ], "items": { "type": "object" } @@ -30643,6 +31951,19 @@ "example": "" } } + }, + "examples": { + "updateSelected": { + "summary": "Update explicitly selected documents", + "value": { + "data": { + "username": "walter.obrien" + }, + "queries": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"\"]}" + ] + } + } } } } @@ -30727,6 +32048,9 @@ "items": { "type": "string" }, + "example": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"\"]}" + ], "default": [] }, "in": "query" @@ -31017,6 +32341,16 @@ "example": "" } } + }, + "examples": { + "upsert": { + "summary": "Create or update document data", + "value": { + "data": { + "username": "walter.obrien" + } + } + } } } } @@ -31137,6 +32471,16 @@ "example": "" } } + }, + "examples": { + "update": { + "summary": "Update document data", + "value": { + "data": { + "username": "walter.obrien" + } + } + } } } } @@ -31703,6 +33047,9 @@ "attributes": { "description": "Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.", "type": "array", + "example": [ + "username" + ], "items": { "type": "string" } @@ -37107,6 +38454,10 @@ "texts": { "description": "Array of text to generate embeddings.", "type": "array", + "example": [ + "Appwrite helps developers build applications.", + "Find documents with semantic search." + ], "items": { "type": "string" } @@ -37527,27 +38878,6 @@ ], "title": "python-ml-3.13" }, - { - "type": "string", - "enum": [ - "deno-1.21" - ], - "title": "deno-1.21" - }, - { - "type": "string", - "enum": [ - "deno-1.24" - ], - "title": "deno-1.24" - }, - { - "type": "string", - "enum": [ - "deno-1.35" - ], - "title": "deno-1.35" - }, { "type": "string", "enum": [ @@ -38685,6 +40015,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -38908,6 +40245,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -39038,6 +40389,19 @@ "Project": [], "Key": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -39102,6 +40466,17 @@ "default": "runtimes" }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] } @@ -39385,27 +40760,6 @@ ], "title": "python-ml-3.13" }, - { - "type": "string", - "enum": [ - "deno-1.21" - ], - "title": "deno-1.21" - }, - { - "type": "string", - "enum": [ - "deno-1.24" - ], - "title": "deno-1.24" - }, - { - "type": "string", - "enum": [ - "deno-1.35" - ], - "title": "deno-1.35" - }, { "type": "string", "enum": [ @@ -40379,27 +41733,6 @@ ], "title": "python-ml-3.13" }, - { - "type": "string", - "enum": [ - "deno-1.21" - ], - "title": "deno-1.21" - }, - { - "type": "string", - "enum": [ - "deno-1.24" - ], - "title": "deno-1.24" - }, - { - "type": "string", - "enum": [ - "deno-1.35" - ], - "title": "deno-1.35" - }, { "type": "string", "enum": [ @@ -41537,6 +42870,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -41760,6 +43100,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -43763,7 +45117,9 @@ "description": "The query or queries to execute.", "type": "object", "default": {}, - "example": {} + "example": { + "query": "query { localeGet { ip } }" + } } }, "required": [ @@ -43841,7 +45197,9 @@ "description": "The query or queries to execute.", "type": "object", "default": {}, - "example": {} + "example": { + "query": "mutation { accountUpdateName(name: \"Walter\") { name } }" + } } }, "required": [ @@ -43853,6 +45211,261 @@ } } }, + "\/growth\/conversations": { + "post": { + "summary": "Create a conversation", + "operationId": "growthCreateConversation", + "tags": [ + "growth" + ], + "description": "Create a conversation with the Appwrite team: support requests, product and docs feedback, enterprise, startup and partner applications, and event sponsorship requests. Signed in console users are identified by their session or JWT; everyone else must pass an email. Attach a file of up to 5MB to support and feedback conversations.", + "responses": { + "201": { + "description": "Growth Conversation", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/growthConversation" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": null, + "demo": "growth\/create-conversation.md", + "rate-limit": 10, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip},type:{param-type}", + "scope": "public", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + } + } + }, + "security": [ + { + "Project": [] + } + ], + "requestBody": { + "content": { + "multipart\/form-data": { + "schema": { + "type": "object", + "properties": { + "type": { + "description": "Conversation type.", + "type": "string", + "example": "support", + "title": "ConversationType", + "oneOf": [ + { + "type": "string", + "enum": [ + "support" + ], + "title": "support" + }, + { + "type": "string", + "enum": [ + "feedback" + ], + "title": "feedback" + }, + { + "type": "string", + "enum": [ + "docs" + ], + "title": "docs" + }, + { + "type": "string", + "enum": [ + "enterprise" + ], + "title": "enterprise" + }, + { + "type": "string", + "enum": [ + "startup" + ], + "title": "startup" + }, + { + "type": "string", + "enum": [ + "partner" + ], + "title": "partner" + }, + { + "type": "string", + "enum": [ + "sponsorship" + ], + "title": "sponsorship" + } + ] + }, + "email": { + "description": "Email address to reply to. Required without a console session, ignored with one.", + "type": "string", + "default": "", + "example": "email@example.com", + "format": "email" + }, + "name": { + "description": "Name of the person filing the conversation. Required for enterprise, startup, partner and sponsorship.", + "type": "string", + "default": "", + "example": "" + }, + "subject": { + "description": "Conversation subject.", + "type": "string", + "default": "", + "example": "" + }, + "message": { + "description": "Conversation message. Required for support, feedback, enterprise and partner.", + "type": "string", + "default": "", + "example": "" + }, + "organizationId": { + "description": "Organization ID the conversation is about. Kept only when the session user is a member.", + "type": "string", + "default": "", + "example": "" + }, + "projectId": { + "description": "Project ID the conversation is about. Kept only when it belongs to the kept organization.", + "type": "string", + "default": "", + "example": "" + }, + "attributes": { + "description": "Additional attributes for the conversation type, as an object or a JSON string.", + "type": "object", + "default": {}, + "example": {} + }, + "attachment": { + "description": "File attachment, support and feedback only, max 5MB.", + "type": "string", + "default": [], + "format": "binary" + } + }, + "required": [ + "type" + ] + }, + "examples": { + "support": { + "summary": "Ask for support", + "value": { + "type": "support", + "email": "walter.obrien@example.com", + "subject": "Custom domain stuck on verifying", + "message": "The domain has been verifying for two hours.", + "projectId": "" + } + }, + "feedback": { + "summary": "Share product feedback", + "value": { + "type": "feedback", + "email": "walter.obrien@example.com", + "message": "The usage page would help more with a daily breakdown.", + "attributes": { + "npsScore": 9 + } + } + }, + "docs": { + "summary": "Rate a docs page", + "value": { + "type": "docs", + "email": "walter.obrien@example.com", + "attributes": { + "rating": "positive", + "route": "\/docs\/products\/auth" + } + } + }, + "enterprise": { + "summary": "Contact sales about Enterprise", + "value": { + "type": "enterprise", + "email": "walter.obrien@example.com", + "name": "Walter O'Brien", + "message": "We need SSO and a dedicated region.", + "attributes": { + "companyName": "Acme", + "companySize": "500-1000", + "companyWebsite": "https:\/\/acme.example" + } + } + }, + "startup": { + "summary": "Apply to the startups program", + "value": { + "type": "startup", + "email": "walter.obrien@example.com", + "name": "Walter O'Brien", + "attributes": { + "companyName": "Acme", + "companyUrl": "https:\/\/acme.example" + } + } + }, + "partner": { + "summary": "Apply to become a partner", + "value": { + "type": "partner", + "email": "walter.obrien@example.com", + "name": "Walter O'Brien", + "message": "We build Appwrite projects for agencies.", + "attributes": { + "companyName": "Acme", + "companyUrl": "https:\/\/acme.example" + } + } + }, + "sponsorship": { + "summary": "Request an event sponsorship", + "value": { + "type": "sponsorship", + "email": "walter.obrien@example.com", + "name": "Walter O'Brien", + "attributes": { + "eventName": "Acme Dev Summit", + "eventDate": "2026-11-14", + "eventType": "in person", + "socialHandles": "@acme", + "estimatedAttendees": 300, + "eventPublicWebLink": "https:\/\/summit.acme.example" + } + } + } + } + } + } + } + } + }, "\/growth\/installations": { "post": { "summary": "Record a self-hosted installation", @@ -43870,17 +45483,22 @@ "x-appwrite": { "group": null, "demo": "growth\/create-installation.md", - "rate-limit": 0, + "rate-limit": 10, "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", + "rate-key": [ + "url:{url},domain:{param-domain}", + "url:{url},ip:{ip}" + ], "scope": "public", "platforms": [ - "manager" + "console" ], "packaging": false, "public": true, "auth": { - "manager": [] + "console": { + "Project": [] + } } }, "security": [ @@ -44022,121 +45640,147 @@ "Key": [], "JWT": [] } - ] - } - }, - "\/locale\/codes": { - "get": { - "summary": "List locale codes", - "operationId": "localeListCodes", - "tags": [ - "locale" + ] + } + }, + "\/locale\/codes": { + "get": { + "summary": "List locale codes", + "operationId": "localeListCodes", + "tags": [ + "locale" + ], + "description": "List of all locale codes in [ISO 639-1](https:\/\/en.wikipedia.org\/wiki\/List_of_ISO_639-1_codes).", + "responses": { + "200": { + "description": "Locale codes list", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/localeCodeList" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": null, + "demo": "locale\/list-codes.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "locale.read", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "Key": [], + "JWT": [] + } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } + ] + } + }, + "\/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" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": null, + "demo": "locale\/list-continents.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "locale.read", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "Key": [], + "JWT": [] + } ], - "description": "List of all locale codes in [ISO 639-1](https:\/\/en.wikipedia.org\/wiki\/List_of_ISO_639-1_codes).", - "responses": { - "200": { - "description": "Locale codes list", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/localeCodeList" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": null, - "demo": "locale\/list-codes.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "locale.read", - "platforms": [ - "console", - "client", - "server" - ], - "packaging": false, - "public": true, - "auth": { - "console": { - "Project": [] - }, - "client": { - "Project": [] - }, - "server": { - "Project": [], - "Session": [] - } - } - }, - "security": [ + "parameters": [ { - "Project": [], - "Session": [], - "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" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": null, - "demo": "locale\/list-continents.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "locale.read", - "platforms": [ - "console", - "client", - "server" - ], - "packaging": false, - "public": true, - "auth": { - "console": { - "Project": [] - }, - "client": { - "Project": [] + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true }, - "server": { - "Project": [], - "Session": [] - } - } - }, - "security": [ - { - "Project": [], - "Session": [], - "Key": [], - "JWT": [] + "in": "query" } ] } @@ -44196,6 +45840,19 @@ "Key": [], "JWT": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -44254,6 +45911,19 @@ "Key": [], "JWT": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -44312,6 +45982,19 @@ "Key": [], "JWT": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -44370,6 +46053,19 @@ "Key": [], "JWT": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -44428,6 +46124,19 @@ "Key": [], "JWT": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -45575,6 +47284,74 @@ } } }, + "\/manager\/organizations\/status": { + "patch": { + "summary": "Update an organization status by ID", + "operationId": "managerUpdateOrganizationStatus", + "tags": [ + "manager" + ], + "description": "Blocks or unblocks an organization, the same way a billing-limit block does. Blocking makes the organization read-only, disables its backup policies and spins down its dedicated databases.", + "responses": { + "200": { + "description": "Organization", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/organization" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "organizations", + "demo": "manager\/update-organization-status.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "", + "platforms": [ + "manager", + "console" + ], + "packaging": false, + "public": true + }, + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "teamId": { + "description": "Organization ID.", + "type": "string", + "example": "" + }, + "status": { + "description": "Organization status. Set to `false` to block and `true` to unblock.", + "type": "boolean", + "example": false + }, + "reason": { + "description": "Optional reason when blocking, kept in the audit trail.", + "type": "string", + "default": "", + "example": "" + } + }, + "required": [ + "teamId", + "status" + ] + } + } + } + } + } + }, "\/manager\/projects\/{projectId}\/databases\/{databaseId}": { "get": { "summary": "Get database routing info", @@ -46092,7 +47869,7 @@ "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\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: scheduledAt, deliveredAt, deliveredTotal, status, description, providerType", + "description": "Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: scheduledAt, deliveredAt, deliveredTotal, status, description, providerType, users, targets", "required": false, "schema": { "type": "array", @@ -46286,6 +48063,17 @@ "subject", "content" ] + }, + "examples": { + "draft": { + "summary": "Create an email draft without sending it", + "value": { + "messageId": "", + "subject": "Welcome", + "content": "Welcome to our app.", + "draft": true + } + } } } } @@ -46360,6 +48148,18 @@ "schema": { "type": "object", "properties": { + "subject": { + "description": "Email Subject.", + "type": "string", + "example": "", + "nullable": true + }, + "content": { + "description": "Email Content.", + "type": "string", + "example": "", + "nullable": true + }, "topics": { "description": "List of Topic IDs.", "type": "array", @@ -46384,30 +48184,6 @@ }, "nullable": true }, - "subject": { - "description": "Email Subject.", - "type": "string", - "example": "", - "nullable": true - }, - "content": { - "description": "Email Content.", - "type": "string", - "example": "", - "nullable": true - }, - "draft": { - "description": "Is message a draft", - "type": "boolean", - "example": false, - "nullable": true - }, - "html": { - "description": "Is content of type HTML", - "type": "boolean", - "example": false, - "nullable": true - }, "cc": { "description": "Array of target IDs to be added as CC.", "type": "array", @@ -46424,6 +48200,14 @@ }, "nullable": true }, + "attachments": { + "description": "Array of compound ID strings of bucket IDs and file IDs to be attached to the email. They should be formatted as :.", + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, "replyToEmail": { "description": "Email address to reply to. Pass an empty string to restore the provider or sender default.", "type": "string", @@ -46437,20 +48221,24 @@ "example": "", "nullable": true }, + "draft": { + "description": "Is message a draft", + "type": "boolean", + "example": false, + "nullable": true + }, + "html": { + "description": "Is content of type HTML", + "type": "boolean", + "example": false, + "nullable": true + }, "scheduledAt": { "description": "Scheduled delivery time for message in [ISO 8601](https:\/\/www.iso.org\/iso-8601-date-and-time-format.html) format. DateTime value must be in future.", "type": "string", "example": "2020-10-15T06:38:00.000+00:00", "format": "datetime", "nullable": true - }, - "attachments": { - "description": "Array of compound ID strings of bucket IDs and file IDs to be attached to the email. They should be formatted as :.", - "type": "array", - "items": { - "type": "string" - }, - "nullable": true } } } @@ -46653,11 +48441,28 @@ "title": "high" } ] + }, + "channelId": { + "description": "ID of the notification channel to deliver the notification on. The app must have already created a channel with this ID, otherwise the channel from the app manifest is used. Available only for Android Platform.", + "type": "string", + "default": "", + "example": "" } }, "required": [ "messageId" ] + }, + "examples": { + "draft": { + "summary": "Create a push notification draft without sending it", + "value": { + "messageId": "", + "title": "Welcome", + "body": "Welcome to our app.", + "draft": true + } + } } } } @@ -46732,6 +48537,18 @@ "schema": { "type": "object", "properties": { + "title": { + "description": "Title for push notification.", + "type": "string", + "example": "", + "nullable": true + }, + "body": { + "description": "Body for push notification.", + "type": "string", + "example": "<BODY>", + "nullable": true + }, "topics": { "description": "List of Topic IDs.", "type": "array", @@ -46756,18 +48573,6 @@ }, "nullable": true }, - "title": { - "description": "Title for push notification.", - "type": "string", - "example": "<TITLE>", - "nullable": true - }, - "body": { - "description": "Body for push notification.", - "type": "string", - "example": "<BODY>", - "nullable": true - }, "data": { "description": "Additional Data for push notification.", "type": "object", @@ -46865,6 +48670,12 @@ } ], "nullable": true + }, + "channelId": { + "description": "ID of the notification channel to deliver the notification on. The app must have already created a channel with this ID, otherwise the channel from the app manifest is used. Pass an empty string to clear it. Available only for Android platforms.", + "type": "string", + "example": "<CHANNEL_ID>", + "nullable": true } } } @@ -47071,6 +48882,16 @@ "messageId", "content" ] + }, + "examples": { + "draft": { + "summary": "Create an SMS draft without sending it", + "value": { + "messageId": "<MESSAGE_ID>", + "content": "Welcome to our app.", + "draft": true + } + } } } } @@ -47135,10 +48956,10 @@ }, "parameters": [ "messageId", + "content", "topics", "users", "targets", - "content", "draft", "scheduledAt" ], @@ -47178,10 +48999,10 @@ }, "parameters": [ "messageId", + "content", "topics", "users", "targets", - "content", "draft", "scheduledAt" ], @@ -47233,6 +49054,12 @@ "schema": { "type": "object", "properties": { + "content": { + "description": "Email Content.", + "type": "string", + "example": "<CONTENT>", + "nullable": true + }, "topics": { "description": "List of Topic IDs.", "type": "array", @@ -47257,12 +49084,6 @@ }, "nullable": true }, - "content": { - "description": "Email Content.", - "type": "string", - "example": "<CONTENT>", - "nullable": true - }, "draft": { "description": "Is message a draft", "type": "boolean", @@ -52121,6 +53942,9 @@ "resources": { "description": "List of resources to migrate", "type": "array", + "example": [ + "user" + ], "items": { "title": "AppwriteMigrationResource", "type": "string", @@ -53122,6 +54946,9 @@ "resources": { "description": "List of resources to migrate", "type": "array", + "example": [ + "user" + ], "items": { "title": "FirebaseMigrationResource", "type": "string", @@ -53341,7 +55168,10 @@ "title": "file" } ] - } + }, + "example": [ + "user" + ] }, "in": "query" }, @@ -53629,6 +55459,9 @@ "resources": { "description": "List of resources to migrate", "type": "array", + "example": [ + "user" + ], "items": { "title": "NHostMigrationResource", "type": "string", @@ -53900,7 +55733,10 @@ "title": "file" } ] - } + }, + "example": [ + "user" + ] }, "in": "query" }, @@ -54033,6 +55869,9 @@ "resources": { "description": "List of resources to migrate", "type": "array", + "example": [ + "user" + ], "items": { "title": "SupabaseMigrationResource", "type": "string", @@ -54299,7 +56138,10 @@ "title": "file" } ] - } + }, + "example": [ + "user" + ] }, "in": "query" }, @@ -56954,6 +58796,22 @@ "nullable": true } } + }, + "examples": { + "backup": { + "summary": "Restore from a backup", + "value": { + "type": "backup", + "backupId": "<BACKUP_ID>" + } + }, + "pitr": { + "summary": "Restore to a point in time within the PITR retention window", + "value": { + "type": "pitr", + "targetTime": "2026-01-01T00:00:00.000+00:00" + } + } } } } @@ -59886,6 +61744,22 @@ "nullable": true } } + }, + "examples": { + "backup": { + "summary": "Restore from a backup", + "value": { + "type": "backup", + "backupId": "<BACKUP_ID>" + } + }, + "pitr": { + "summary": "Restore to a point in time within the PITR retention window", + "value": { + "type": "pitr", + "targetTime": "2026-01-01T00:00:00.000+00:00" + } + } } } } @@ -60170,6 +62044,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] } @@ -61027,6 +62912,105 @@ ] } }, + "\/oauth2\/{project_id}\/introspect": { + "post": { + "summary": "OAuth2 Introspect", + "operationId": "oauth2Introspect", + "tags": [ + "oauth2" + ], + "description": "Introspect an OAuth2 access token or refresh token. Authenticate with an API key holding the `oauth2.introspect` scope to introspect any token in the project, or with the client credentials of the app the token was issued to.", + "responses": { + "200": { + "description": "OAuth2 Introspection", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/oauth2Introspection" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "tokens", + "demo": "oauth2\/introspect.md", + "rate-limit": 120, + "rate-time": 60, + "rate-key": "url:{url},ip:{ip}", + "scope": "global", + "platforms": [ + "server" + ], + "packaging": false, + "public": true, + "config": { + "project_id": "project" + }, + "auth": { + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Key": [] + } + ], + "parameters": [ + { + "name": "project_id", + "description": "Project ID in which OAuth2 client exists.", + "required": true, + "schema": { + "type": "string", + "example": "<PROJECT_ID>" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "token": { + "description": "The access token or refresh token to introspect.", + "type": "string", + "example": "<TOKEN>" + }, + "token_type_hint": { + "description": "Type of token to introspect. Can be one of: `access_token` or `refresh_token`.", + "type": "string", + "default": "", + "example": "access_token" + }, + "client_id": { + "description": "OAuth2 client ID. Either a registered app ID or an HTTPS client ID metadata document URL.", + "type": "string", + "default": "", + "example": "<CLIENT_ID>" + }, + "client_secret": { + "description": "OAuth2 client secret.", + "type": "string", + "default": "", + "example": "<CLIENT_SECRET>" + } + }, + "required": [ + "token" + ] + } + } + } + } + } + }, "\/oauth2\/{project_id}\/logout": { "get": { "summary": "OAuth2 Logout", @@ -61973,6 +63957,34 @@ "required": [ "grant_type" ] + }, + "examples": { + "authorizationCode": { + "summary": "Exchange an authorization code", + "value": { + "grant_type": "authorization_code", + "code": "<CODE>", + "redirect_uri": "https:\/\/example.com\/callback", + "client_id": "<CLIENT_ID>", + "code_verifier": "<CODE_VERIFIER>" + } + }, + "refreshToken": { + "summary": "Refresh an access token", + "value": { + "grant_type": "refresh_token", + "refresh_token": "<REFRESH_TOKEN>", + "client_id": "<CLIENT_ID>" + } + }, + "deviceCode": { + "summary": "Exchange a device code", + "value": { + "grant_type": "urn:ietf:params:oauth:grant-type:device_code", + "device_code": "<DEVICE_CODE>", + "client_id": "<CLIENT_ID>" + } + } } } } @@ -64080,6 +66092,9 @@ "scopes": { "description": "Key scopes list. Maximum of 200 scopes are allowed.", "type": "array", + "example": [ + "users.read" + ], "items": { "title": "ProjectKeyScopes", "type": "string", @@ -64714,6 +66729,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -64937,6 +66959,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -65035,6 +67071,9 @@ "scopes": { "description": "Key scopes list. Maximum of 200 scopes are allowed.", "type": "array", + "example": [ + "users.read" + ], "items": { "title": "ProjectKeyScopes", "type": "string", @@ -65669,6 +67708,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -65892,6 +67938,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -66079,6 +68139,9 @@ "scopes": { "description": "Key scopes list. Maximum of 200 scopes are allowed.", "type": "array", + "example": [ + "users.read" + ], "items": { "title": "ProjectKeyScopes", "type": "string", @@ -66713,6 +68776,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -66936,6 +69006,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -73293,6 +75377,22 @@ "nullable": true } } + }, + "examples": { + "backup": { + "summary": "Restore from a backup", + "value": { + "type": "backup", + "backupId": "<BACKUP_ID>" + } + }, + "pitr": { + "summary": "Restore to a point in time within the PITR retention window", + "value": { + "type": "pitr", + "targetTime": "2026-01-01T00:00:00.000+00:00" + } + } } } } @@ -74576,6 +76676,9 @@ "scopes": { "description": "Key scopes list. Maximum of 200 scopes are allowed.", "type": "array", + "example": [ + "users.read" + ], "items": { "title": "ProjectKeyScopes", "type": "string", @@ -75210,6 +77313,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -75433,6 +77543,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -75515,6 +77639,9 @@ "scopes": { "description": "Key scopes list. Maximum of 200 scopes are allowed.", "type": "array", + "example": [ + "users.read" + ], "items": { "title": "ProjectKeyScopes", "type": "string", @@ -76149,6 +78276,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -76372,6 +78506,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -76531,6 +78679,9 @@ "scopes": { "description": "Key scopes list. Maximum of 200 scopes are allowed.", "type": "array", + "example": [ + "users.read" + ], "items": { "title": "ProjectKeyScopes", "type": "string", @@ -77165,6 +79316,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -77388,6 +79546,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -77524,6 +79696,9 @@ "labels": { "description": "Array of project labels. Replaces the previous labels. Maximum of 1000 labels are allowed, each up to 36 alphanumeric characters long.", "type": "array", + "example": [ + "production" + ], "items": { "type": "string" } @@ -78494,6 +80669,38 @@ "example": "<ENDPOINT>", "nullable": true }, + "prompt": { + "description": "Array of Auth0 OAuth2 prompt values. If \"none\" is included, it must be the only element. \"none\" means: don't display any authentication or consent screens. \"login\" means: prompt the user to re-authenticate. \"consent\" means: prompt the user for consent. Pass an empty array to use the Auth0 default.", + "type": "array", + "items": { + "title": "ProjectOAuth2Auth0Prompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -79148,6 +81355,31 @@ "example": "<CLIENT_SECRET>", "nullable": true }, + "prompt": { + "description": "Array with at most one Discord OAuth2 prompt value. \"none\" means: skip the authorization screen for users who already authorized the app with the requested scopes. \"consent\" means: ask users who already authorized the app to approve it again. Pass an empty array to use the Discord default.", + "type": "array", + "items": { + "title": "ProjectOAuth2DiscordPrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -79721,6 +81953,24 @@ "example": "<CLIENT_SECRET>", "nullable": true }, + "prompt": { + "description": "Array of GitHub OAuth2 prompt values. \"select_account\" means: prompt the user to select an account. Pass an empty array to use the GitHub default.", + "type": "array", + "items": { + "title": "ProjectOAuth2GitHubPrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "select_account" + ], + "title": "select_account" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -80098,6 +82348,45 @@ "example": "<CLIENT_SECRET>", "nullable": true }, + "prompt": { + "description": "Array of Kakao OAuth2 prompt values. If \"none\" is included, it must be the only element. \"none\" means: don't display any authentication or consent screens. \"login\" means: prompt the user to re-authenticate. \"create\" means: prompt the user to sign up. \"select_account\" means: prompt the user to select an account. Pass an empty array to use the Kakao default.", + "type": "array", + "items": { + "title": "ProjectOAuth2KakaoPrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "create" + ], + "title": "create" + }, + { + "type": "string", + "enum": [ + "select_account" + ], + "title": "select_account" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -80440,6 +82729,45 @@ "example": "<TENANT>", "nullable": true }, + "prompt": { + "description": "Array of Microsoft OAuth2 prompt values. \"none\" means: don't display any authentication or consent screens. \"login\" means: prompt the user to re-authenticate. \"consent\" means: prompt the user for consent. \"select_account\" means: prompt the user to select an account. Pass an empty array to use the Microsoft default.", + "type": "array", + "items": { + "title": "ProjectOAuth2MicrosoftPrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + }, + { + "type": "string", + "enum": [ + "select_account" + ], + "title": "select_account" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -80769,6 +83097,38 @@ "example": "<AUTHORIZATION_SERVER_ID>", "nullable": true }, + "prompt": { + "description": "Array of Okta OAuth2 prompt values. If \"none\" is included, it must be the only element. \"none\" means: don't display any authentication or consent screens. \"login\" means: prompt the user to re-authenticate. \"consent\" means: prompt the user for consent. Pass an empty array to use the Okta default.", + "type": "array", + "items": { + "title": "ProjectOAuth2OktaPrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -81174,6 +83534,31 @@ "example": "<CUSTOMER_SECRET>", "nullable": true }, + "prompt": { + "description": "Array of Salesforce OAuth2 prompt values. \"login\" means: prompt the user to re-authenticate. \"consent\" means: prompt the user for consent. Pass an empty array to use the Salesforce default.", + "type": "array", + "items": { + "title": "ProjectOAuth2SalesforcePrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -81754,6 +84139,87 @@ } } }, + "\/project\/oauth2\/webflow": { + "patch": { + "summary": "Update project OAuth2 Webflow", + "operationId": "projectUpdateOAuth2Webflow", + "tags": [ + "project" + ], + "description": "Update the project OAuth2 Webflow configuration.", + "responses": { + "200": { + "description": "OAuth2Webflow", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/oAuth2Webflow" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "oauth2", + "demo": "project\/update-o-auth-2-webflow.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "project.oauth2.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "clientId": { + "description": "'Client ID' of Webflow OAuth2 app. For example: 8bb20000000000000000000000000000000000000000000000000000000040dd", + "type": "string", + "example": "<CLIENT_ID>", + "nullable": true + }, + "clientSecret": { + "description": "'Client Secret' of Webflow OAuth2 app. For example: 59bf00000000000000000000000000000000000000000000000000000000fe59", + "type": "string", + "example": "<CLIENT_SECRET>", + "nullable": true + }, + "enabled": { + "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", + "type": "boolean", + "example": false, + "nullable": true + } + } + } + } + } + } + } + }, "\/project\/oauth2\/wordpress": { "patch": { "summary": "Update project OAuth2 WordPress", @@ -82146,6 +84612,24 @@ "example": "<CLIENT_SECRET>", "nullable": true }, + "prompt": { + "description": "Array of Zoho OAuth2 prompt values. \"consent\" means: prompt the user for consent. Pass an empty array to use the Zoho default.", + "type": "array", + "items": { + "title": "ProjectOAuth2ZohoPrompt", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "nullable": true + }, "enabled": { "description": "OAuth2 sign-in method status. Set to true to enable new session creation. Setting to true will trigger end-to-end credentials validation, and will throw if the credentials are invalid.", "type": "boolean", @@ -82250,7 +84734,7 @@ "description": "Get a single OAuth2 provider configuration. Credential fields (client secret, p8 file, key\/team IDs) are write-only and always returned empty.", "responses": { "200": { - "description": "OAuth2GitHub, or OAuth2Discord, or OAuth2Figma, or OAuth2Dropbox, or OAuth2Dailymotion, or OAuth2Bitbucket, or OAuth2Bitly, or OAuth2Box, or OAuth2Autodesk, or OAuth2Google, or OAuth2Zoom, or OAuth2Zoho, or OAuth2Yandex, or OAuth2X, or OAuth2WordPress, or OAuth2Twitch, or OAuth2Stripe, or OAuth2Spotify, or OAuth2Slack, or OAuth2Podio, or OAuth2Notion, or OAuth2Salesforce, or OAuth2Yahoo, or OAuth2HuggingFace, or OAuth2Resend, or OAuth2Cloudflare, or OAuth2Linkedin, or OAuth2Disqus, or OAuth2Amazon, or OAuth2Etsy, or OAuth2Facebook, or OAuth2Tradeshift, or OAuth2Paypal, or OAuth2Gitlab, or OAuth2Authentik, or OAuth2Auth0, or OAuth2FusionAuth, or OAuth2Keycloak, or OAuth2Oidc, or OAuth2Apple, or OAuth2Okta, or OAuth2Kick, or OAuth2Microsoft, or OAuth2TikTok, or OAuth2Kakao", + "description": "OAuth2GitHub, or OAuth2Discord, or OAuth2Figma, or OAuth2Dropbox, or OAuth2Dailymotion, or OAuth2Bitbucket, or OAuth2Bitly, or OAuth2Box, or OAuth2Autodesk, or OAuth2Google, or OAuth2Zoom, or OAuth2Zoho, or OAuth2Yandex, or OAuth2X, or OAuth2WordPress, or OAuth2Webflow, or OAuth2Twitch, or OAuth2Stripe, or OAuth2Spotify, or OAuth2Slack, or OAuth2Podio, or OAuth2Notion, or OAuth2Salesforce, or OAuth2Yahoo, or OAuth2HuggingFace, or OAuth2Resend, or OAuth2Cloudflare, or OAuth2Linkedin, or OAuth2Disqus, or OAuth2Amazon, or OAuth2Etsy, or OAuth2Facebook, or OAuth2Tradeshift, or OAuth2Paypal, or OAuth2Gitlab, or OAuth2Authentik, or OAuth2Auth0, or OAuth2FusionAuth, or OAuth2Keycloak, or OAuth2Oidc, or OAuth2Apple, or OAuth2Okta, or OAuth2Kick, or OAuth2Microsoft, or OAuth2TikTok, or OAuth2Kakao", "content": { "application\/json": { "schema": { @@ -82300,6 +84784,9 @@ { "$ref": "#\/components\/schemas\/oAuth2WordPress" }, + { + "$ref": "#\/components\/schemas\/oAuth2Webflow" + }, { "$ref": "#\/components\/schemas\/oAuth2Twitch" }, @@ -82409,6 +84896,7 @@ "yandex": "#\/components\/schemas\/oAuth2Yandex", "x": "#\/components\/schemas\/oAuth2X", "wordpress": "#\/components\/schemas\/oAuth2WordPress", + "webflow": "#\/components\/schemas\/oAuth2Webflow", "twitch": "#\/components\/schemas\/oAuth2Twitch", "stripe": "#\/components\/schemas\/oAuth2Stripe", "spotify": "#\/components\/schemas\/oAuth2Spotify", @@ -82782,6 +85270,13 @@ ], "title": "twitch" }, + { + "type": "string", + "enum": [ + "webflow" + ], + "title": "webflow" + }, { "type": "string", "enum": [ @@ -86025,6 +88520,9 @@ "emails": { "description": "Array of emails to send test email to. Maximum of 10 emails are allowed.", "type": "array", + "example": [ + "recipient@example.com" + ], "items": { "type": "string" } @@ -89667,7 +92165,7 @@ "tags": [ "proxy" ], - "description": "Create a new CDN cache invalidation for a domain. Executes a hard purge of cached content.\n\nDepending on type, the invalidation purges a single cache tag, a single URL path, or all cached content for the domain.", + "description": "Create a new CDN cache invalidation for a domain. Executes a hard purge of cached content.\n\nDepending on type, the invalidation purges a single cache tag, a single URL path, or all cached content for the domain.\n\nDomains that route to a function do not support cache invalidation.", "responses": { "201": { "description": "Invalidation", @@ -89761,6 +92259,24 @@ "domain", "type" ] + }, + "examples": { + "tag": { + "summary": "Purge a cache tag", + "value": { + "domain": "example.com", + "type": "tag", + "reference": "<TAG>" + } + }, + "path": { + "summary": "Purge a URL path", + "value": { + "domain": "example.com", + "type": "path", + "reference": "\/blog\/hello-world" + } + } } } } @@ -90970,6 +93486,14 @@ "type": "string", "default": "", "example": "<SERVICE>" + }, + "disabledMetrics": { + "description": "Usage metrics to skip for this execution, matched by suffix. The execution is still logged.", + "type": "array", + "default": [], + "items": { + "type": "string" + } } }, "required": [ @@ -92001,27 +94525,6 @@ ], "title": "python-ml-3.13" }, - { - "type": "string", - "enum": [ - "deno-1.21" - ], - "title": "deno-1.21" - }, - { - "type": "string", - "enum": [ - "deno-1.24" - ], - "title": "deno-1.24" - }, - { - "type": "string", - "enum": [ - "deno-1.35" - ], - "title": "deno-1.35" - }, { "type": "string", "enum": [ @@ -93196,6 +95699,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -93419,6 +95929,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] } @@ -93485,6 +96009,19 @@ "Project": [], "Key": [] } + ], + "parameters": [ + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" + } ] } }, @@ -93549,6 +96086,17 @@ "default": "runtimes" }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] } @@ -93828,6 +96376,17 @@ "default": 0 }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] } @@ -94418,27 +96977,6 @@ ], "title": "python-ml-3.13" }, - { - "type": "string", - "enum": [ - "deno-1.21" - ], - "title": "deno-1.21" - }, - { - "type": "string", - "enum": [ - "deno-1.24" - ], - "title": "deno-1.24" - }, - { - "type": "string", - "enum": [ - "deno-1.35" - ], - "title": "deno-1.35" - }, { "type": "string", "enum": [ @@ -95613,6 +98151,13 @@ ], "title": "avatars.read" }, + { + "type": "string", + "enum": [ + "avatars.write" + ], + "title": "avatars.write" + }, { "type": "string", "enum": [ @@ -95836,6 +98381,20 @@ "oauth2.introspect" ], "title": "oauth2.introspect" + }, + { + "type": "string", + "enum": [ + "analytics.read" + ], + "title": "analytics.read" + }, + { + "type": "string", + "enum": [ + "analytics.write" + ], + "title": "analytics.write" } ] }, @@ -97703,7 +100262,7 @@ "example": false }, "maximumFileSize": { - "description": "Maximum file size allowed in bytes. Maximum allowed value is 0B.", + "description": "Maximum file size allowed in bytes. Maximum allowed value is 5GB.", "type": "integer", "default": {}, "example": 1, @@ -97935,7 +100494,7 @@ "example": false }, "maximumFileSize": { - "description": "Maximum file size allowed in bytes. Maximum allowed value is 0B.", + "description": "Maximum file size allowed in bytes. Maximum allowed value is 5GB.", "type": "integer", "default": {}, "example": 1, @@ -99407,6 +101966,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] }, @@ -99649,6 +102219,20 @@ "example": false } } + }, + "examples": { + "commit": { + "summary": "Commit the transaction", + "value": { + "commit": true + } + }, + "rollback": { + "summary": "Roll back the transaction", + "value": { + "rollback": true + } + } } } } @@ -99816,6 +102400,24 @@ } } } + }, + "examples": { + "createRow": { + "summary": "Stage a row creation", + "value": { + "operations": [ + { + "action": "create", + "databaseId": "<DATABASE_ID>", + "tableId": "<TABLE_ID>", + "rowId": "<ROW_ID>", + "data": { + "username": "walter.obrien" + } + } + ] + } + } } } } @@ -106719,6 +109321,9 @@ "columns": { "description": "Array of columns to index. Maximum of 100 columns are allowed, each 32 characters long.", "type": "array", + "example": [ + "username" + ], "items": { "type": "string" } @@ -107266,6 +109871,16 @@ "description": "Array of rows data as JSON objects.", "type": "array", "default": [], + "example": [ + { + "$id": "example1", + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + ], "items": { "type": "object" } @@ -107409,6 +110024,16 @@ "rows": { "description": "Array of row data as JSON objects. May contain partial rows.", "type": "array", + "example": [ + { + "$id": "example1", + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + ], "items": { "type": "object" } @@ -107535,6 +110160,19 @@ "nullable": true } } + }, + "examples": { + "updateSelected": { + "summary": "Update explicitly selected rows", + "value": { + "data": { + "username": "walter.obrien" + }, + "queries": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"<ROW_ID>\"]}" + ] + } + } } } } @@ -107622,6 +110260,9 @@ "items": { "type": "string" }, + "example": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"<ROW_ID>\"]}" + ], "default": [] }, "in": "query" @@ -107926,6 +110567,20 @@ "nullable": true } } + }, + "examples": { + "upsert": { + "summary": "Create or update row data", + "value": { + "data": { + "username": "walter.obrien", + "email": "walter.obrien@example.com", + "fullName": "Walter O'Brien", + "age": 30, + "isAdmin": false + } + } + } } } } @@ -108057,6 +110712,16 @@ "nullable": true } } + }, + "examples": { + "update": { + "summary": "Update row data", + "value": { + "data": { + "username": "walter.obrien" + } + } + } } } } @@ -108591,7 +111256,7 @@ "example": "<NAME>" }, "roles": { - "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](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.", + "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](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 81 characters long.", "type": "array", "default": [ "owner" @@ -109462,6 +112127,9 @@ "roles": { "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](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 81 characters long.", "type": "array", + "example": [ + "editor" + ], "items": { "type": "string" } @@ -109654,6 +112322,9 @@ "roles": { "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 81 characters long.", "type": "array", + "example": [ + "editor" + ], "items": { "type": "string" } @@ -110448,6 +113119,27 @@ "title": "UsageEventMetric", "type": "string", "oneOf": [ + { + "type": "string", + "enum": [ + "analytics.events" + ], + "title": "analytics.events" + }, + { + "type": "string", + "enum": [ + "analytics.pageviews" + ], + "title": "analytics.pageviews" + }, + { + "type": "string", + "enum": [ + "analytics.bots.events" + ], + "title": "analytics.bots.events" + }, { "type": "string", "enum": [ @@ -110497,6 +113189,13 @@ ], "title": "messages.sent" }, + { + "type": "string", + "enum": [ + "messages.failed" + ], + "title": "messages.failed" + }, { "type": "string", "enum": [ @@ -110831,7 +113530,7 @@ }, { "name": "queries", - "description": "Up to 10 filter queries in Utopia syntax. Allowed attributes, also published as the `UsageEventDimension` enum: path, method, status, service, resourceType, resourceId, teamId, country, continentCode, city, region, hostname, ip, osName, clientType, clientName, deviceName, sdk, sdkVersion, isp, autonomousSystemNumber, autonomousSystemOrganization, connectionType, connectionUsageType, connectionOrganization. Allowed methods: equal, notEqual, contains, startsWith, endsWith, isNull, isNotNull. Example: `queries[]=equal(\"resourceType\", [\"bucket\"])`.", + "description": "Up to 10 filter queries in Utopia syntax. Allowed attributes, also published as the `UsageEventDimension` enum: path, method, status, service, resourceType, resourceId, teamId, country, continentCode, city, region, hostname, ip, osName, clientType, clientName, deviceName, sdk, sdkVersion, protocol, queryKeys, accept, acceptLanguage, postalCode, latitude, longitude, timeZone, weatherCode, isp, autonomousSystemNumber, autonomousSystemOrganization, connectionType, connectionUsageType, connectionOrganization. Allowed methods: equal, notEqual, contains, startsWith, endsWith, isNull, isNotNull. Example: `queries[]=equal(\"resourceType\", [\"bucket\"])`.", "required": false, "schema": { "type": "array", @@ -110892,7 +113591,7 @@ }, { "name": "dimensions", - "description": "Break-down dimensions (max 10). Allowed: path, method, status, service, resourceType, country, continentCode, city, region, hostname, ip, osName, clientType, clientName, deviceName, sdk, sdkVersion, teamId, resourceId, isp, autonomousSystemNumber, autonomousSystemOrganization, connectionType, connectionUsageType, connectionOrganization.", + "description": "Break-down dimensions (max 10). Allowed: path, method, status, service, resourceType, country, continentCode, city, region, hostname, ip, osName, clientType, clientName, deviceName, sdk, sdkVersion, teamId, resourceId, protocol, queryKeys, accept, acceptLanguage, postalCode, latitude, longitude, timeZone, weatherCode, isp, autonomousSystemNumber, autonomousSystemOrganization, connectionType, connectionUsageType, connectionOrganization.", "required": false, "schema": { "type": "array", @@ -111033,6 +113732,69 @@ ], "title": "resourceId" }, + { + "type": "string", + "enum": [ + "protocol" + ], + "title": "protocol" + }, + { + "type": "string", + "enum": [ + "queryKeys" + ], + "title": "queryKeys" + }, + { + "type": "string", + "enum": [ + "accept" + ], + "title": "accept" + }, + { + "type": "string", + "enum": [ + "acceptLanguage" + ], + "title": "acceptLanguage" + }, + { + "type": "string", + "enum": [ + "postalCode" + ], + "title": "postalCode" + }, + { + "type": "string", + "enum": [ + "latitude" + ], + "title": "latitude" + }, + { + "type": "string", + "enum": [ + "longitude" + ], + "title": "longitude" + }, + { + "type": "string", + "enum": [ + "timeZone" + ], + "title": "timeZone" + }, + { + "type": "string", + "enum": [ + "weatherCode" + ], + "title": "weatherCode" + }, { "type": "string", "enum": [ @@ -111247,6 +114009,13 @@ "title": "UsageGaugeMetric", "type": "string", "oneOf": [ + { + "type": "string", + "enum": [ + "analytics.properties" + ], + "title": "analytics.properties" + }, { "type": "string", "enum": [ @@ -113457,6 +116226,9 @@ "labels": { "description": "Array of user labels. Replaces the previous labels. Maximum of 1000 labels are allowed, each up to 36 alphanumeric characters long.", "type": "array", + "example": [ + "subscriber" + ], "items": { "type": "string" } @@ -116257,6 +119029,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] }, @@ -116504,6 +119287,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] } @@ -116946,6 +119740,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] } @@ -117249,6 +120054,17 @@ "default": [] }, "in": "query" + }, + { + "name": "total", + "description": "When set to false, the total count returned will be 0 and will not be calculated.", + "required": false, + "schema": { + "type": "boolean", + "example": false, + "default": true + }, + "in": "query" } ] }, @@ -117482,6 +120298,20 @@ "example": false } } + }, + "examples": { + "commit": { + "summary": "Commit the transaction", + "value": { + "commit": true + } + }, + "rollback": { + "summary": "Roll back the transaction", + "value": { + "rollback": true + } + } } } } @@ -117634,7 +120464,15 @@ "collectionId": "<COLLECTION_ID>", "documentId": "<DOCUMENT_ID>", "data": { - "name": "Walter O'Brien" + "embeddings": [ + 0.12, + -0.55, + 0.88, + 1.02 + ], + "metadata": { + "name": "First document" + } } } ], @@ -117643,6 +120481,32 @@ } } } + }, + "examples": { + "createDocument": { + "summary": "Stage a document creation in a four-dimensional collection", + "value": { + "operations": [ + { + "action": "create", + "databaseId": "<DATABASE_ID>", + "collectionId": "<COLLECTION_ID>", + "documentId": "<DOCUMENT_ID>", + "data": { + "embeddings": [ + 0.12, + -0.55, + 0.88, + 1.02 + ], + "metadata": { + "name": "Example document" + } + } + } + ] + } + } } } } @@ -118052,7 +120916,7 @@ "dimension": { "description": "Embedding dimension.", "type": "integer", - "example": 1, + "example": 4, "format": "int32" }, "permissions": { @@ -118247,7 +121111,7 @@ "dimension": { "description": "Embedding dimensions.", "type": "integer", - "example": 1, + "example": 4, "format": "int32" }, "permissions": { @@ -118676,6 +121540,20 @@ "description": "Array of documents data as JSON objects.", "type": "array", "default": [], + "example": [ + { + "$id": "example1", + "embeddings": [ + 0.12, + -0.55, + 0.88, + 1.02 + ], + "metadata": { + "name": "First document" + } + } + ], "items": { "type": "object" } @@ -118815,6 +121693,20 @@ "documents": { "description": "Array of document data as JSON objects. May contain partial documents.", "type": "array", + "example": [ + { + "$id": "example1", + "embeddings": [ + 0.12, + -0.55, + 0.88, + 1.02 + ], + "metadata": { + "name": "First document" + } + } + ], "items": { "type": "object" } @@ -118930,6 +121822,21 @@ "example": "<TRANSACTION_ID>" } } + }, + "examples": { + "updateSelected": { + "summary": "Update metadata on explicitly selected documents", + "value": { + "data": { + "metadata": { + "name": "Updated document" + } + }, + "queries": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"<DOCUMENT_ID>\"]}" + ] + } + } } } } @@ -119014,6 +121921,9 @@ "items": { "type": "string" }, + "example": [ + "{\"method\":\"equal\",\"attribute\":\"$id\",\"values\":[\"<DOCUMENT_ID>\"]}" + ], "default": [] }, "in": "query" @@ -119421,6 +122331,24 @@ "example": "<TRANSACTION_ID>" } } + }, + "examples": { + "upsert": { + "summary": "Create or update a document in a four-dimensional collection", + "value": { + "data": { + "embeddings": [ + 0.12, + -0.55, + 0.88, + 1.02 + ], + "metadata": { + "name": "Example document" + } + } + } + } } } } @@ -119541,6 +122469,18 @@ "example": "<TRANSACTION_ID>" } } + }, + "examples": { + "update": { + "summary": "Update document metadata", + "value": { + "data": { + "metadata": { + "name": "Updated document" + } + } + } + } } } } @@ -119870,6 +122810,9 @@ "attributes": { "description": "Array of attributes to index. Maximum of 100 attributes are allowed, each 32 characters long.", "type": "array", + "example": [ + "embeddings" + ], "items": { "type": "string" } @@ -120581,6 +123524,19 @@ "resourceType", "name" ] + }, + "examples": { + "scoped": { + "summary": "Bypass other rules for an IP", + "value": { + "ruleId": "<RULE_ID>", + "resourceType": "api", + "name": "Office network", + "conditions": [ + "{\"method\":\"equal\",\"attribute\":\"ip\",\"values\":[\"198.51.100.10\"]}" + ] + } + } } } } @@ -120831,6 +123787,19 @@ "resourceType", "name" ] + }, + "examples": { + "scoped": { + "summary": "Challenge requests to a path", + "value": { + "ruleId": "<RULE_ID>", + "resourceType": "api", + "name": "Challenge sign-ins", + "conditions": [ + "{\"method\":\"startsWith\",\"attribute\":\"path\",\"values\":[\"\/v1\/account\/sessions\"]}" + ] + } + } } } } @@ -121081,6 +124050,19 @@ "resourceType", "name" ] + }, + "examples": { + "scoped": { + "summary": "Deny requests from an IP range", + "value": { + "ruleId": "<RULE_ID>", + "resourceType": "api", + "name": "Block abusive range", + "conditions": [ + "{\"method\":\"equal\",\"attribute\":\"ip\",\"values\":[\"203.0.113.0\/24\"]}" + ] + } + } } } } @@ -121344,6 +124326,21 @@ "limit", "interval" ] + }, + "examples": { + "scoped": { + "summary": "Rate limit requests to a path", + "value": { + "ruleId": "<RULE_ID>", + "resourceType": "api", + "name": "Limit sign-ins", + "limit": 10, + "interval": 60, + "conditions": [ + "{\"method\":\"startsWith\",\"attribute\":\"path\",\"values\":[\"\/v1\/account\/sessions\"]}" + ] + } + } } } } @@ -121614,6 +124611,21 @@ "location", "statusCode" ] + }, + "examples": { + "scoped": { + "summary": "Redirect requests for a path", + "value": { + "ruleId": "<RULE_ID>", + "resourceType": "api", + "name": "Moved page", + "location": "\/new-page", + "statusCode": 301, + "conditions": [ + "{\"method\":\"equal\",\"attribute\":\"path\",\"values\":[\"\/old-page\"]}" + ] + } + } } } } @@ -122019,6 +125031,9 @@ "events": { "description": "Events list. Maximum of 100 events are allowed.", "type": "array", + "example": [ + "users.*.create" + ], "items": { "type": "string" } @@ -122210,6 +125225,9 @@ "events": { "description": "Events list. Maximum of 100 events are allowed.", "type": "array", + "example": [ + "users.*.create" + ], "items": { "type": "string" } @@ -122233,11 +125251,11 @@ "example": "<AUTH_USERNAME>" }, "authPassword": { - "description": "Webhook HTTP password. Max length: 256 chars.", + "description": "Webhook HTTP password. Max length: 256 chars. Omit to keep the current password; it is cleared when the URL changes or TLS verification is disabled.", "type": "string", - "default": "", "example": "password", - "format": "password" + "format": "password", + "nullable": true } }, "required": [ @@ -122545,6 +125563,10 @@ "name": "activities", "description": "The Activities service allows you to list and inspect project activity events." }, + { + "name": "analytics", + "description": "" + }, { "name": "waf", "description": "" @@ -122563,7 +125585,7 @@ }, { "name": "growth", - "description": "" + "description": "The Growth service allows you to contact the Appwrite team and record self-hosted installations." } ], "components": { @@ -132084,202 +135106,401 @@ "impersonatorUserId": "5e5ea5c16897e" } }, - "algoMd5": { - "description": "AlgoMD5", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "md5" - } - }, - "required": [ - "type" - ], - "example": { - "type": "md5" - } - }, - "algoSha": { - "description": "AlgoSHA", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "sha" - } - }, - "required": [ - "type" - ], - "example": { - "type": "sha" - } - }, - "algoPhpass": { - "description": "AlgoPHPass", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "phpass" - } - }, - "required": [ - "type" - ], - "example": { - "type": "phpass" - } - }, - "algoBcrypt": { - "description": "AlgoBcrypt", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "bcrypt" - } - }, - "required": [ - "type" - ], - "example": { - "type": "bcrypt" - } - }, - "algoScrypt": { - "description": "AlgoScrypt", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "scrypt" - }, - "costCpu": { - "type": "integer", - "description": "CPU complexity of computed hash.", - "format": "int32", - "example": 8 - }, - "costMemory": { - "type": "integer", - "description": "Memory complexity of computed hash.", - "format": "int32", - "example": 14 - }, - "costParallel": { - "type": "integer", - "description": "Parallelization of computed hash.", - "format": "int32", - "example": 1 - }, - "length": { - "type": "integer", - "description": "Length used to compute hash.", - "format": "int32", - "example": 64 - } - }, - "required": [ - "type", - "costCpu", - "costMemory", - "costParallel", - "length" - ], - "example": { - "type": "scrypt", - "costCpu": 8, - "costMemory": 14, - "costParallel": 1, - "length": 64 - } - }, - "algoScryptModified": { - "description": "AlgoScryptModified", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "scryptMod" - }, - "salt": { - "type": "string", - "description": "Salt used to compute hash.", - "example": "UxLMreBr6tYyjQ==" - }, - "saltSeparator": { - "type": "string", - "description": "Separator used to compute hash.", - "example": "Bw==" - }, - "signerKey": { - "type": "string", - "description": "Key used to compute hash.", - "example": "XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ==" - } - }, - "required": [ - "type", - "salt", - "saltSeparator", - "signerKey" - ], - "example": { - "type": "scryptMod", - "salt": "UxLMreBr6tYyjQ==", - "saltSeparator": "Bw==", - "signerKey": "XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ==" - } - }, - "algoArgon2": { - "description": "AlgoArgon2", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Algo type.", - "example": "argon2" - }, - "memoryCost": { - "type": "integer", - "description": "Memory used to compute hash.", - "format": "int32", - "example": 65536 - }, - "timeCost": { - "type": "integer", - "description": "Amount of time consumed to compute hash", - "format": "int32", - "example": 4 - }, - "threads": { - "type": "integer", - "description": "Number of threads used to compute hash.", - "format": "int32", - "example": 3 - } - }, - "required": [ - "type", - "memoryCost", - "timeCost", - "threads" - ], - "example": { - "type": "argon2", - "memoryCost": 65536, - "timeCost": 4, - "threads": 3 - } - }, + "algoMd5": { + "description": "AlgoMD5", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "md5" + } + }, + "required": [ + "type" + ], + "example": { + "type": "md5" + } + }, + "algoSha": { + "description": "AlgoSHA", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "sha" + } + }, + "required": [ + "type" + ], + "example": { + "type": "sha" + } + }, + "algoPhpass": { + "description": "AlgoPHPass", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "phpass" + } + }, + "required": [ + "type" + ], + "example": { + "type": "phpass" + } + }, + "algoBcrypt": { + "description": "AlgoBcrypt", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "bcrypt" + } + }, + "required": [ + "type" + ], + "example": { + "type": "bcrypt" + } + }, + "algoScrypt": { + "description": "AlgoScrypt", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "scrypt" + }, + "costCpu": { + "type": "integer", + "description": "CPU complexity of computed hash.", + "format": "int32", + "example": 8 + }, + "costMemory": { + "type": "integer", + "description": "Memory complexity of computed hash.", + "format": "int32", + "example": 14 + }, + "costParallel": { + "type": "integer", + "description": "Parallelization of computed hash.", + "format": "int32", + "example": 1 + }, + "length": { + "type": "integer", + "description": "Length used to compute hash.", + "format": "int32", + "example": 64 + } + }, + "required": [ + "type", + "costCpu", + "costMemory", + "costParallel", + "length" + ], + "example": { + "type": "scrypt", + "costCpu": 8, + "costMemory": 14, + "costParallel": 1, + "length": 64 + } + }, + "algoScryptModified": { + "description": "AlgoScryptModified", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "scryptMod" + }, + "salt": { + "type": "string", + "description": "Salt used to compute hash.", + "example": "UxLMreBr6tYyjQ==" + }, + "saltSeparator": { + "type": "string", + "description": "Separator used to compute hash.", + "example": "Bw==" + }, + "signerKey": { + "type": "string", + "description": "Key used to compute hash.", + "example": "XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ==" + } + }, + "required": [ + "type", + "salt", + "saltSeparator", + "signerKey" + ], + "example": { + "type": "scryptMod", + "salt": "UxLMreBr6tYyjQ==", + "saltSeparator": "Bw==", + "signerKey": "XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ==" + } + }, + "algoArgon2": { + "description": "AlgoArgon2", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Algo type.", + "example": "argon2" + }, + "memoryCost": { + "type": "integer", + "description": "Memory used to compute hash.", + "format": "int32", + "example": 65536 + }, + "timeCost": { + "type": "integer", + "description": "Amount of time consumed to compute hash", + "format": "int32", + "example": 4 + }, + "threads": { + "type": "integer", + "description": "Number of threads used to compute hash.", + "format": "int32", + "example": 3 + } + }, + "required": [ + "type", + "memoryCost", + "timeCost", + "threads" + ], + "example": { + "type": "argon2", + "memoryCost": 65536, + "timeCost": 4, + "threads": 3 + } + }, + "account": { + "description": "Account", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "User ID.", + "example": "5e5ea5c16897e" + }, + "$createdAt": { + "type": "string", + "description": "User creation date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "$updatedAt": { + "type": "string", + "description": "User update date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "name": { + "type": "string", + "description": "User name.", + "example": "John Doe" + }, + "registration": { + "type": "string", + "description": "User registration date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "status": { + "type": "boolean", + "description": "User status. Pass `true` for enabled and `false` for disabled.", + "example": true + }, + "labels": { + "type": "array", + "description": "Labels for the user.", + "items": { + "type": "string" + }, + "example": [ + "vip" + ] + }, + "passwordUpdate": { + "type": "string", + "description": "Password update time in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "email": { + "type": "string", + "description": "User email address.", + "example": "john@appwrite.io" + }, + "phone": { + "type": "string", + "description": "User phone number in E.164 format.", + "example": "+4930901820" + }, + "emailVerification": { + "type": "boolean", + "description": "Email verification status.", + "example": true + }, + "emailCanonical": { + "type": "string", + "description": "Canonical form of the user email address.", + "example": "john@appwrite.io", + "nullable": true + }, + "emailIsFree": { + "type": "boolean", + "description": "Whether the user email is from a free email provider.", + "example": true, + "nullable": true + }, + "emailIsDisposable": { + "type": "boolean", + "description": "Whether the user email is from a disposable email provider.", + "example": false, + "nullable": true + }, + "emailIsCorporate": { + "type": "boolean", + "description": "Whether the user email is from a corporate domain.", + "example": true, + "nullable": true + }, + "emailIsCanonical": { + "type": "boolean", + "description": "Whether the user email is in its canonical form.", + "example": true, + "nullable": true + }, + "passwordPwned": { + "type": "boolean", + "description": "Whether the password was found in a known data breach the last time it was checked. Null when the password has never been checked.", + "example": false, + "nullable": true + }, + "phoneVerification": { + "type": "boolean", + "description": "Phone verification status.", + "example": true + }, + "mfa": { + "type": "boolean", + "description": "Multi factor authentication status.", + "example": true + }, + "prefs": { + "type": "object", + "description": "User preferences as a key-value object", + "example": { + "theme": "pink", + "timezone": "UTC" + }, + "allOf": [ + { + "$ref": "#\/components\/schemas\/preferences" + } + ] + }, + "targets": { + "type": "array", + "description": "A user-owned message receiver. A single user may have multiple e.g. emails, phones, and a browser. Each target is registered with a single provider.", + "items": { + "$ref": "#\/components\/schemas\/target" + }, + "example": [] + }, + "accessedAt": { + "type": "string", + "description": "Most recent access date in ISO 8601 format. This attribute is only updated again after 24 hours.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "impersonator": { + "type": "boolean", + "description": "Whether the user can impersonate other users.", + "example": false, + "nullable": true + }, + "impersonatorUserId": { + "type": "string", + "description": "ID of the original actor performing the impersonation. Present only when the current request is impersonating another user. Internal audit logs attribute the action to this user, while the impersonated target is recorded only in internal audit payload data.", + "example": "5e5ea5c16897e", + "nullable": true + } + }, + "required": [ + "$id", + "$createdAt", + "$updatedAt", + "name", + "registration", + "status", + "labels", + "passwordUpdate", + "email", + "phone", + "emailVerification", + "phoneVerification", + "mfa", + "prefs", + "targets", + "accessedAt" + ], + "example": { + "$id": "5e5ea5c16897e", + "$createdAt": "2020-10-15T06:38:00.000+00:00", + "$updatedAt": "2020-10-15T06:38:00.000+00:00", + "name": "John Doe", + "registration": "2020-10-15T06:38:00.000+00:00", + "status": true, + "labels": [ + "vip" + ], + "passwordUpdate": "2020-10-15T06:38:00.000+00:00", + "email": "john@appwrite.io", + "phone": "+4930901820", + "emailVerification": true, + "emailCanonical": "john@appwrite.io", + "emailIsFree": true, + "emailIsDisposable": false, + "emailIsCorporate": true, + "emailIsCanonical": true, + "passwordPwned": false, + "phoneVerification": true, + "mfa": true, + "prefs": { + "theme": "pink", + "timezone": "UTC" + }, + "targets": [], + "accessedAt": "2020-10-15T06:38:00.000+00:00", + "impersonator": false, + "impersonatorUserId": "5e5ea5c16897e" + } + }, "preferences": { "description": "Preferences", "type": "object", @@ -136399,7 +139620,7 @@ }, "authPassword": { "type": "string", - "description": "HTTP basic authentication password.", + "description": "HTTP basic authentication password. Write-only: always returned empty.", "format": "password", "example": "webhook-password" }, @@ -136686,19 +139907,42 @@ "type": "string", "description": "GitHub OAuth2 client secret.", "example": "5e07c00000000000000000000000000000198bcc" + }, + "prompt": { + "type": "array", + "description": "GitHub OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "select_account" + ], + "title": "select_account" + } + ] + }, + "example": [ + "select_account" + ] } }, "required": [ "$id", "enabled", "clientId", - "clientSecret" + "clientSecret", + "prompt" ], "example": { "$id": "github", "enabled": false, "clientId": "e4d87900000000540733", - "clientSecret": "5e07c00000000000000000000000000000198bcc" + "clientSecret": "5e07c00000000000000000000000000000198bcc", + "prompt": [ + "select_account" + ] } }, "oAuth2Discord": { @@ -136724,19 +139968,49 @@ "type": "string", "description": "Discord OAuth2 client secret.", "example": "YmPXnM000000000000000000002zFg5D" + }, + "prompt": { + "type": "array", + "description": "Discord OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "example": [ + "none" + ] } }, "required": [ "$id", "enabled", "clientId", - "clientSecret" + "clientSecret", + "prompt" ], "example": { "$id": "github", "enabled": false, "clientId": "950722000000343754", - "clientSecret": "YmPXnM000000000000000000002zFg5D" + "clientSecret": "YmPXnM000000000000000000002zFg5D", + "prompt": [ + "none" + ] } }, "oAuth2Figma": { @@ -137162,19 +140436,42 @@ "type": "string", "description": "Zoho OAuth2 client secret.", "example": "fb5cac000000000000000000000000000000a68f6e" + }, + "prompt": { + "type": "array", + "description": "Zoho OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "example": [ + "consent" + ] } }, "required": [ "$id", "enabled", "clientId", - "clientSecret" + "clientSecret", + "prompt" ], "example": { "$id": "github", "enabled": false, "clientId": "1000.83C178000000000000000000RPNX0B", - "clientSecret": "fb5cac000000000000000000000000000000a68f6e" + "clientSecret": "fb5cac000000000000000000000000000000a68f6e", + "prompt": [ + "consent" + ] } }, "oAuth2Yandex": { @@ -137291,6 +140588,44 @@ "clientSecret": "PlBfJS0000000000000000000000000000000000000000000000000000EdUZJk" } }, + "oAuth2Webflow": { + "description": "OAuth2Webflow", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "OAuth2 provider ID.", + "example": "github" + }, + "enabled": { + "type": "boolean", + "description": "OAuth2 provider is active and can be used to create sessions.", + "example": false + }, + "clientId": { + "type": "string", + "description": "Webflow OAuth2 client ID.", + "example": "8bb20000000000000000000000000000000000000000000000000000000040dd" + }, + "clientSecret": { + "type": "string", + "description": "Webflow OAuth2 client secret.", + "example": "59bf00000000000000000000000000000000000000000000000000000000fe59" + } + }, + "required": [ + "$id", + "enabled", + "clientId", + "clientSecret" + ], + "example": { + "$id": "github", + "enabled": false, + "clientId": "8bb20000000000000000000000000000000000000000000000000000000040dd", + "clientSecret": "59bf00000000000000000000000000000000000000000000000000000000fe59" + } + }, "oAuth2Twitch": { "description": "OAuth2Twitch", "type": "object", @@ -137542,19 +140877,49 @@ "type": "string", "description": "Salesforce OAuth2 consumer secret.", "example": "3w000000000000e2" + }, + "prompt": { + "type": "array", + "description": "Salesforce OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "example": [ + "login" + ] } }, "required": [ "$id", "enabled", "customerKey", - "customerSecret" + "customerSecret", + "prompt" ], "example": { "$id": "github", "enabled": false, "customerKey": "3MVG9I0000000000000000000000000000000000000000000000000000000000000000000000000C5Aejq", - "customerSecret": "3w000000000000e2" + "customerSecret": "3w000000000000e2", + "prompt": [ + "login" + ] } }, "oAuth2Yahoo": { @@ -138089,6 +141454,39 @@ "description": "Auth0 OAuth2 client secret.", "example": "zXz0000-00000000000000000000000000000-00000000000000000000PJafnF" }, + "prompt": { + "type": "array", + "description": "Auth0 OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "example": [ + "none" + ] + }, "endpoint": { "type": "string", "description": "Auth0 OAuth2 endpoint domain.", @@ -138100,6 +141498,7 @@ "enabled", "clientId", "clientSecret", + "prompt", "endpoint" ], "example": { @@ -138107,6 +141506,9 @@ "enabled": false, "clientId": "OaOkIA000000000000000000005KLSYq", "clientSecret": "zXz0000-00000000000000000000000000000-00000000000000000000PJafnF", + "prompt": [ + "none" + ], "endpoint": "example.us.auth0.com" } }, @@ -138231,26 +141633,6 @@ "description": "OpenID Connect OAuth2 client secret.", "example": "Ah68ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003qpcHV" }, - "wellKnownURL": { - "type": "string", - "description": "OpenID Connect well-known configuration URL. When set, authorization, token, and user info endpoints can be discovered automatically.", - "example": "https:\/\/myoauth.com\/.well-known\/openid-configuration" - }, - "authorizationURL": { - "type": "string", - "description": "OpenID Connect authorization endpoint URL.", - "example": "https:\/\/myoauth.com\/oauth2\/authorize" - }, - "tokenURL": { - "type": "string", - "description": "OpenID Connect token endpoint URL.", - "example": "https:\/\/myoauth.com\/oauth2\/token" - }, - "userInfoURL": { - "type": "string", - "description": "OpenID Connect user info endpoint URL.", - "example": "https:\/\/myoauth.com\/oauth2\/userinfo" - }, "prompt": { "type": "array", "description": "OpenID Connect prompt values controlling the authentication and consent screens.", @@ -138288,9 +141670,29 @@ ] }, "example": [ - "consent" + "none" ] }, + "wellKnownURL": { + "type": "string", + "description": "OpenID Connect well-known configuration URL. When set, authorization, token, and user info endpoints can be discovered automatically.", + "example": "https:\/\/myoauth.com\/.well-known\/openid-configuration" + }, + "authorizationURL": { + "type": "string", + "description": "OpenID Connect authorization endpoint URL.", + "example": "https:\/\/myoauth.com\/oauth2\/authorize" + }, + "tokenURL": { + "type": "string", + "description": "OpenID Connect token endpoint URL.", + "example": "https:\/\/myoauth.com\/oauth2\/token" + }, + "userInfoURL": { + "type": "string", + "description": "OpenID Connect user info endpoint URL.", + "example": "https:\/\/myoauth.com\/oauth2\/userinfo" + }, "maxAge": { "type": "integer", "description": "Maximum authentication age in seconds. When set, the user must have authenticated within this many seconds.", @@ -138304,24 +141706,24 @@ "enabled", "clientId", "clientSecret", + "prompt", "wellKnownURL", "authorizationURL", "tokenURL", - "userInfoURL", - "prompt" + "userInfoURL" ], "example": { "$id": "github", "enabled": false, "clientId": "qibI2x0000000000000000000000000006L2YFoG", "clientSecret": "Ah68ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003qpcHV", + "prompt": [ + "none" + ], "wellKnownURL": "https:\/\/myoauth.com\/.well-known\/openid-configuration", "authorizationURL": "https:\/\/myoauth.com\/oauth2\/authorize", "tokenURL": "https:\/\/myoauth.com\/oauth2\/token", "userInfoURL": "https:\/\/myoauth.com\/oauth2\/userinfo", - "prompt": [ - "consent" - ], "maxAge": 3600 } }, @@ -138349,6 +141751,39 @@ "description": "Okta OAuth2 client secret.", "example": "Kiq0000000000000000000000000000000000000-00000000000H2L5-3SJ-vRV" }, + "prompt": { + "type": "array", + "description": "Okta OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + } + ] + }, + "example": [ + "none" + ] + }, "domain": { "type": "string", "description": "Okta OAuth2 domain.", @@ -138365,6 +141800,7 @@ "enabled", "clientId", "clientSecret", + "prompt", "domain", "authorizationServerId" ], @@ -138373,6 +141809,9 @@ "enabled": false, "clientId": "0oa00000000000000698", "clientSecret": "Kiq0000000000000000000000000000000000000-00000000000H2L5-3SJ-vRV", + "prompt": [ + "none" + ], "domain": "trial-6400025.okta.com", "authorizationServerId": "aus000000000000000h7z" } @@ -138512,6 +141951,46 @@ "description": "Microsoft OAuth2 application secret.", "example": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u" }, + "prompt": { + "type": "array", + "description": "Microsoft OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "consent" + ], + "title": "consent" + }, + { + "type": "string", + "enum": [ + "select_account" + ], + "title": "select_account" + } + ] + }, + "example": [ + "none" + ] + }, "tenant": { "type": "string", "description": "Microsoft Entra ID tenant identifier. Use 'common', 'organizations', 'consumers' or a specific tenant ID.", @@ -138523,6 +142002,7 @@ "enabled", "applicationId", "applicationSecret", + "prompt", "tenant" ], "example": { @@ -138530,6 +142010,9 @@ "enabled": false, "applicationId": "00001111-aaaa-2222-bbbb-3333cccc4444", "applicationSecret": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u", + "prompt": [ + "none" + ], "tenant": "common" } }, @@ -138632,19 +142115,63 @@ "type": "string", "description": "Kakao OAuth2 client secret.", "example": "jLNVOK00000000000000000000yJebea" + }, + "prompt": { + "type": "array", + "description": "Kakao OAuth2 prompt values.", + "items": { + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "none" + ], + "title": "none" + }, + { + "type": "string", + "enum": [ + "login" + ], + "title": "login" + }, + { + "type": "string", + "enum": [ + "create" + ], + "title": "create" + }, + { + "type": "string", + "enum": [ + "select_account" + ], + "title": "select_account" + } + ] + }, + "example": [ + "none" + ] } }, "required": [ "$id", "enabled", "clientId", - "clientSecret" + "clientSecret", + "prompt" ], "example": { "$id": "github", "enabled": false, "clientId": "839ff5000000000000000000013206de", - "clientSecret": "jLNVOK00000000000000000000yJebea" + "clientSecret": "jLNVOK00000000000000000000yJebea", + "prompt": [ + "none" + ] } }, "oAuth2ProviderList": { @@ -138707,6 +142234,9 @@ { "$ref": "#\/components\/schemas\/oAuth2WordPress" }, + { + "$ref": "#\/components\/schemas\/oAuth2Webflow" + }, { "$ref": "#\/components\/schemas\/oAuth2Twitch" }, @@ -138819,6 +142349,7 @@ "yandex": "#\/components\/schemas\/oAuth2Yandex", "x": "#\/components\/schemas\/oAuth2X", "wordpress": "#\/components\/schemas\/oAuth2WordPress", + "webflow": "#\/components\/schemas\/oAuth2Webflow", "twitch": "#\/components\/schemas\/oAuth2Twitch", "stripe": "#\/components\/schemas\/oAuth2Stripe", "spotify": "#\/components\/schemas\/oAuth2Spotify", @@ -140369,6 +143900,36 @@ "example": "California", "nullable": true }, + "postalCode": { + "type": "string", + "description": "Postal code when broken down by `postalCode`.", + "example": "94043", + "nullable": true + }, + "latitude": { + "type": "string", + "description": "Latitude when broken down by `latitude`.", + "example": "37.4223", + "nullable": true + }, + "longitude": { + "type": "string", + "description": "Longitude when broken down by `longitude`.", + "example": "-122.0848", + "nullable": true + }, + "timeZone": { + "type": "string", + "description": "Time zone when broken down by `timeZone`.", + "example": "America\/Los_Angeles", + "nullable": true + }, + "weatherCode": { + "type": "string", + "description": "Weather station code when broken down by `weatherCode`.", + "example": "USCA0746", + "nullable": true + }, "isp": { "type": "string", "description": "Internet service provider when broken down by `isp`.", @@ -140442,6 +144003,11 @@ "continentCode": "NA", "city": "Mountain View", "subdivisions": "California", + "postalCode": "94043", + "latitude": "37.4223", + "longitude": "-122.0848", + "timeZone": "America\/Los_Angeles", + "weatherCode": "USCA0746", "isp": "Google", "autonomousSystemNumber": "15169", "autonomousSystemOrganization": "GOOGLE", @@ -140647,7 +144213,7 @@ "example": "n3u9feiwmf" }, "deploymentResourceType": { - "description": "Type of deployment. Possible values are \"function\", \"site\". Used if rule's type is \"deployment\".", + "description": "Type of deployment resource: function, site, or dedicatedDatabase.", "example": "function", "type": "string", "oneOf": [ @@ -140664,6 +144230,13 @@ "site" ], "title": "site" + }, + { + "type": "string", + "enum": [ + "dedicatedDatabase" + ], + "title": "dedicatedDatabase" } ], "nullable": true @@ -143588,6 +147161,225 @@ "resources": "" } }, + "analyticsMetric": { + "description": "AnalyticsMetric", + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Dimension value this row covers. Null when no dimension was requested, empty when the dimension could not be derived for those events.", + "example": "google.com", + "nullable": true + }, + "date": { + "type": "string", + "description": "Start of the time bucket this row covers, in ISO 8601. Null when no interval was requested.", + "example": "2026-05-01T00:00:00.000+00:00", + "nullable": true + }, + "visitors": { + "type": "integer", + "description": "Unique visitors in the requested range.", + "format": "int32", + "example": 1234 + }, + "sessions": { + "type": "integer", + "description": "Unique sessions in the requested range.", + "format": "int32", + "example": 4567 + }, + "pageviews": { + "type": "integer", + "description": "Total pageview events (events with name=\"pageview\") in the requested range. Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "int32", + "example": 5678, + "nullable": true + }, + "events": { + "type": "integer", + "description": "Total events in the requested range.", + "format": "int32", + "example": 8910 + }, + "visits": { + "type": "integer", + "description": "Total sessions with activity in the requested range. Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "int32", + "example": 2345, + "nullable": true + }, + "bounceRate": { + "type": "number", + "description": "Share of single-event sessions, as a percentage. Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "double", + "example": 42.5, + "nullable": true + }, + "visitDuration": { + "type": "number", + "description": "Average session length in seconds, measured first event to last event. Single-event sessions count as 0. Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "double", + "example": 75.4, + "nullable": true + }, + "viewsPerVisit": { + "type": "number", + "description": "Average pageviews per session (pageviews divided by visits). Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "double", + "example": 2.7, + "nullable": true + }, + "scrollDepth": { + "type": "number", + "description": "Average scroll depth across events, as a percentage. Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "double", + "example": 65, + "nullable": true + }, + "engagementTime": { + "type": "number", + "description": "Average engaged time per session in seconds, counting only foreground time. Sessions that reported no engagement are excluded. Only the flat aggregate computes it; null on breakdown and time-series rows.", + "format": "double", + "example": 18432, + "nullable": true + } + }, + "required": [ + "visitors", + "sessions", + "events" + ], + "example": { + "value": "google.com", + "date": "2026-05-01T00:00:00.000+00:00", + "visitors": 1234, + "sessions": 4567, + "pageviews": 5678, + "events": 8910, + "visits": 2345, + "bounceRate": 42.5, + "visitDuration": 75.4, + "viewsPerVisit": 2.7, + "scrollDepth": 65, + "engagementTime": 18432 + } + }, + "analyticsMetricList": { + "description": "AnalyticsMetricList", + "type": "object", + "properties": { + "total": { + "type": "integer", + "description": "Total number of metric rows returned.", + "format": "int32", + "example": 30 + }, + "metrics": { + "type": "array", + "description": "Metric rows: one per time bucket, one per dimension value, or a single row for the flat aggregate.", + "items": { + "$ref": "#\/components\/schemas\/analyticsMetric" + }, + "example": [] + } + }, + "required": [ + "total", + "metrics" + ], + "example": { + "total": 30, + "metrics": [] + } + }, + "analyticsProperty": { + "description": "AnalyticsProperty", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "Analytics property ID.", + "example": "5e5ea5c16897e" + }, + "$createdAt": { + "type": "string", + "description": "Property creation date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "$updatedAt": { + "type": "string", + "description": "Property update date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "name": { + "type": "string", + "description": "Human-readable name of the tracked website or application.", + "example": "My Website" + }, + "domain": { + "type": "string", + "description": "Primary domain being tracked (e.g. example.com). May be empty for native apps.", + "example": "example.com" + }, + "timezone": { + "type": "string", + "description": "IANA timezone used to define the daily boundary for stats.", + "example": "UTC" + }, + "enabled": { + "type": "boolean", + "description": "Whether tracking is currently active.", + "example": true + }, + "public": { + "type": "boolean", + "description": "Whether stats for this property are publicly viewable.", + "example": false + }, + "allowedOrigins": { + "type": "array", + "description": "List of origins allowed to send tracking events. Use [\"*\"] to allow all.", + "items": { + "type": "string" + }, + "example": [ + "https:\/\/example.com" + ] + }, + "snippetId": { + "type": "string", + "description": "Unique identifier for the tracking script snippet.", + "example": "snp_a1b2c3d4e5" + } + }, + "required": [ + "$id", + "$createdAt", + "$updatedAt", + "name", + "domain", + "timezone", + "enabled", + "public", + "allowedOrigins", + "snippetId" + ], + "example": { + "$id": "5e5ea5c16897e", + "$createdAt": "2020-10-15T06:38:00.000+00:00", + "$updatedAt": "2020-10-15T06:38:00.000+00:00", + "name": "My Website", + "domain": "example.com", + "timezone": "UTC", + "enabled": true, + "public": false, + "allowedOrigins": [ + "https:\/\/example.com" + ], + "snippetId": "snp_a1b2c3d4e5" + } + }, "aggregationTeam": { "description": "Team", "type": "object", @@ -143876,9 +147668,10 @@ }, "size": { "type": "integer", - "description": "Archive size in bytes.", + "description": "Archive size in bytes. Null until the size is known.", "format": "int32", - "example": 100000 + "example": 100000, + "nullable": true }, "status": { "type": "string", @@ -143887,8 +147680,9 @@ }, "startedAt": { "type": "string", - "description": "The backup start time.", - "example": "2020-10-15T06:38:00.000+00:00" + "description": "The backup start time. Null until the backup starts.", + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "migrationId": { "type": "string", @@ -143933,9 +147727,7 @@ "$createdAt", "$updatedAt", "policyId", - "size", "status", - "startedAt", "migrationId", "services", "resources" @@ -144555,12 +148347,13 @@ }, "usage": { "type": "object", - "description": "Additional resources", + "description": "Additional resources. Null when the plan does not support usage billing.", "allOf": [ { "$ref": "#\/components\/schemas\/usageBillingPlan" } - ] + ], + "nullable": true }, "addons": { "type": "object", @@ -144826,7 +148619,6 @@ "usageLogs", "projectInactivityDays", "alertLimit", - "usage", "addons", "budgetCapEnabled", "customSmtp", @@ -146528,7 +150320,7 @@ }, "connections": { "type": "object", - "description": "Connection statistics.", + "description": "Connection statistics. Null when the database has not been probed.", "example": { "current": 12, "max": 100 @@ -146537,7 +150329,8 @@ { "$ref": "#\/components\/schemas\/databaseStatusConnections" } - ] + ], + "nullable": true }, "syncMode": { "type": "string", @@ -146620,7 +150413,6 @@ "engine", "version", "uptime", - "connections", "syncMode", "syncDegraded", "syncAcknowledgements", @@ -147600,6 +151392,37 @@ "organizationCredits": 0 } }, + "growthConversation": { + "description": "Growth Conversation", + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Conversation type.", + "example": "support" + }, + "email": { + "type": "string", + "description": "Email address the conversation was filed under. For a signed in console user this is the account email.", + "example": "john@appwrite.io" + }, + "organizationId": { + "type": "string", + "description": "Organization ID the conversation was filed against. Empty when none was given or the user is not a member.", + "example": "5e5ea5c16897e" + } + }, + "required": [ + "type", + "email", + "organizationId" + ], + "example": { + "type": "support", + "email": "john@appwrite.io", + "organizationId": "5e5ea5c16897e" + } + }, "dedicatedDatabaseExtensions": { "description": "Extensions", "type": "object", @@ -148789,7 +152612,7 @@ ] } ], - "config": [], + "config": {}, "resourceInternalId": 1 } }, @@ -150002,8 +153825,9 @@ }, "startedAt": { "type": "string", - "description": "The backup start time.", - "example": "2020-10-15T06:38:00.000+00:00" + "description": "The restoration start time. Null until the restoration starts.", + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "migrationId": { "type": "string", @@ -150031,9 +153855,20 @@ ] }, "options": { - "type": "string", - "description": "Optional data in key-value object. ", - "example": "{databases.database[{oldId, newId, newName}]}" + "type": "object", + "additionalProperties": true, + "description": "Restoration options as a key-value object.", + "example": { + "databases": { + "database": [ + { + "oldId": "old", + "newId": "new", + "newName": "Restored" + } + ] + } + } } }, "required": [ @@ -150043,7 +153878,6 @@ "archiveId", "policyId", "status", - "startedAt", "migrationId", "services", "resources", @@ -150060,7 +153894,17 @@ "migrationId": "did8jx6ws45jana098ab7", "services": "['databases', 'storage']", "resources": "['databases', 'collections', 'attributes', 'indexes']", - "options": "{databases.database[{oldId, newId, newName}]}" + "options": { + "databases": { + "database": [ + { + "oldId": "old", + "newId": "new", + "newName": "Restored" + } + ] + } + } } }, "dedicatedDatabaseRestorationList": { @@ -150214,7 +154058,7 @@ "example": "n3u9feiwmf" }, "deploymentResourceType": { - "description": "Type of deployment. Possible values are \"function\", \"site\". Used if rule's type is \"deployment\".", + "description": "Type of deployment resource: function, site, or dedicatedDatabase.", "example": "function", "type": "string", "oneOf": [ @@ -150231,6 +154075,13 @@ "site" ], "title": "site" + }, + { + "type": "string", + "enum": [ + "dedicatedDatabase" + ], + "title": "dedicatedDatabase" } ], "nullable": true @@ -151059,6 +154910,12 @@ "format": "int32", "example": 0 }, + "avatarsStorageTotal": { + "type": "integer", + "description": "Aggregated stats for total custom user photos storage.", + "format": "int32", + "example": 0 + }, "storageTotal": { "type": "integer", "description": "Aggregated stats for total storage.", @@ -151149,6 +155006,7 @@ "databasesReadsTotal", "databasesWritesTotal", "backupsStorageTotal", + "avatarsStorageTotal", "storageTotal", "authPhoneTotal", "authPhoneEstimate", @@ -151181,6 +155039,7 @@ "databasesReadsTotal": 0, "databasesWritesTotal": 0, "backupsStorageTotal": 0, + "avatarsStorageTotal": 0, "storageTotal": 0, "authPhoneTotal": 0, "authPhoneEstimate": 0, @@ -152355,6 +156214,126 @@ "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..." } }, + "oauth2Introspection": { + "description": "OAuth2 Introspection", + "type": "object", + "properties": { + "active": { + "type": "boolean", + "description": "Whether the token is currently active. An inactive token carries no other claims (RFC 7662).", + "example": true + }, + "token_use": { + "type": "string", + "description": "Kind of token that was introspected. Can be one of: `access_token` or `refresh_token`.", + "example": "access_token", + "nullable": true + }, + "token_type": { + "type": "string", + "description": "OAuth2 token type.", + "example": "Bearer", + "nullable": true + }, + "scope": { + "type": "string", + "description": "Space-separated scopes granted to the token.", + "example": "openid email profile", + "nullable": true + }, + "client_id": { + "type": "string", + "description": "OAuth2 client ID the token was issued to.", + "example": "5e5ea5c16897e", + "nullable": true + }, + "sub": { + "type": "string", + "description": "ID of the user who authorized the token.", + "example": "5e5ea5c16897e", + "nullable": true + }, + "aud": { + "type": "array", + "description": "Audiences the token is intended for. The first entry is the project API base URL; any further entries are the resource indicators requested at authorization time (RFC 8707).", + "items": { + "type": "string" + }, + "example": [ + "https:\/\/cloud.appwrite.io\/v1\/5e5ea5c16897e" + ], + "nullable": true + }, + "iss": { + "type": "string", + "description": "Issuer URL of the token.", + "example": "https:\/\/cloud.appwrite.io\/v1\/oauth2\/5e5ea5c16897e", + "nullable": true + }, + "exp": { + "type": "integer", + "description": "Expiration time as a Unix timestamp in seconds.", + "format": "int32", + "example": 1735689600, + "nullable": true + }, + "iat": { + "type": "integer", + "description": "Issued-at time as a Unix timestamp in seconds.", + "format": "int32", + "example": 1735686000, + "nullable": true + }, + "jti": { + "type": "string", + "description": "Unique identifier of the token.", + "example": "5e5ea5c16897e", + "nullable": true + }, + "authorization_details": { + "type": "array", + "description": "Granted RFC 9396 authorization details, restricted to what the user can currently access.", + "items": { + "type": "object" + }, + "example": [ + { + "type": "project", + "identifiers": [ + "5e5ea5c16897e" + ] + } + ], + "nullable": true + } + }, + "required": [ + "active" + ], + "example": { + "active": true, + "token_use": "access_token", + "token_type": "Bearer", + "scope": "openid email profile", + "client_id": "5e5ea5c16897e", + "sub": "5e5ea5c16897e", + "aud": [ + "https:\/\/cloud.appwrite.io\/v1\/5e5ea5c16897e" + ], + "iss": "https:\/\/cloud.appwrite.io\/v1\/oauth2\/5e5ea5c16897e", + "exp": 1735689600, + "iat": 1735686000, + "jti": "5e5ea5c16897e", + "authorization_details": [ + { + "type": "project", + "identifiers": [ + "5e5ea5c16897e" + ] + } + ] + } + }, "oauth2Consent": { "description": "OAuth2 Consent", "type": "object", @@ -152722,7 +156701,7 @@ ] } ], - "config": [] + "config": {} } }, "wafRuleBypass": { @@ -152889,7 +156868,7 @@ ] } ], - "config": [] + "config": {} } }, "wafRuleDeny": { @@ -153056,7 +157035,7 @@ ] } ], - "config": [] + "config": {} } }, "wafRuleChallenge": { @@ -153243,7 +157222,7 @@ ] } ], - "config": [], + "config": {}, "challengeType": "compute", "difficulty": 3, "ttl": 1800 @@ -153446,7 +157425,7 @@ ] } ], - "config": [], + "config": {}, "limit": 1000, "interval": 60, "key": "userId", @@ -153631,7 +157610,7 @@ ] } ], - "config": [], + "config": {}, "location": "\/maintenance", "statusCode": 301 } @@ -153908,6 +157887,34 @@ "addons": "" } }, + "analyticsPropertyList": { + "description": "Analytics properties list", + "type": "object", + "properties": { + "total": { + "type": "integer", + "description": "Total number of properties that matched your query.", + "format": "int32", + "example": 5 + }, + "properties": { + "type": "array", + "description": "List of properties.", + "items": { + "$ref": "#\/components\/schemas\/analyticsProperty" + }, + "example": [] + } + }, + "required": [ + "total", + "properties" + ], + "example": { + "total": 5, + "properties": "" + } + }, "aggregationTeamList": { "description": "Aggregation team list", "type": "object",