diff --git a/specs/latest/open-api3-latest.json b/specs/latest/open-api3-latest.json index ab2c57252..1405f55c2 100644 --- a/specs/latest/open-api3-latest.json +++ b/specs/latest/open-api3-latest.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "2.3.0", + "version": "2.4.0", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -3390,6 +3390,471 @@ } } }, + "\/account\/passkeys": { + "get": { + "summary": "List passkeys", + "operationId": "accountListPasskeys", + "tags": [ + "account" + ], + "description": "Get the list of verified passkeys registered by the currently logged in user.", + "responses": { + "200": { + "description": "Passkeys List", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkeyList" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "account\/list-passkeys.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "account", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "parameters": [ + { + "name": "queries", + "description": "Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter and order on the following attributes: $id, $createdAt, $updatedAt, name, accessedAt", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "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 passkey", + "operationId": "accountCreatePasskey", + "tags": [ + "account" + ], + "description": "Start registering a passkey for the currently logged in user. The session must have signed in or completed an MFA challenge within the last 10 minutes. Pass the returned `publicKey` options to `navigator.credentials.create()`, then complete the registration with [Update passkey verification](\/docs\/references\/cloud\/client-web\/account#updatePasskeyVerification). The passkey stays pending until verified, and the challenge expires after 5 minutes.", + "responses": { + "201": { + "description": "Passkey Challenge", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkeyChallenge" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "account\/create-passkey.md", + "rate-limit": 10, + "rate-time": 3600, + "rate-key": "url:{url},userId:{userId}", + "scope": "account", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "passkeyId": { + "description": "Passkey ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", + "type": "string", + "default": "unique()", + "example": "" + }, + "name": { + "description": "Passkey name, shown when listing passkeys. Max length: 128 chars.", + "type": "string", + "default": "", + "example": "" + } + } + } + } + } + } + } + }, + "\/account\/passkeys\/{passkeyId}": { + "get": { + "summary": "Get passkey", + "operationId": "accountGetPasskey", + "tags": [ + "account" + ], + "description": "Get a verified passkey of the currently logged in user by its unique ID.", + "responses": { + "200": { + "description": "Passkey", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkey" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "account\/get-passkey.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "account", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "parameters": [ + { + "name": "passkeyId", + "description": "Passkey ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ] + }, + "patch": { + "summary": "Update passkey", + "operationId": "accountUpdatePasskey", + "tags": [ + "account" + ], + "description": "Rename a passkey of the currently logged in user.", + "responses": { + "200": { + "description": "Passkey", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkey" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "account\/update-passkey.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "account", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "parameters": [ + { + "name": "passkeyId", + "description": "Passkey ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "description": "Passkey name. Max length: 128 chars.", + "type": "string", + "example": "" + } + }, + "required": [ + "name" + ] + } + } + } + } + }, + "delete": { + "summary": "Delete passkey", + "operationId": "accountDeletePasskey", + "tags": [ + "account" + ], + "description": "Delete a passkey from the currently logged in user. The passkey can no longer be used to sign in, although it may remain stored on the user's device. The session must have signed in or completed an MFA challenge within the last 10 minutes.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "account\/delete-passkey.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "account", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "parameters": [ + { + "name": "passkeyId", + "description": "Passkey ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ] + } + }, + "\/account\/passkeys\/{passkeyId}\/verification": { + "put": { + "summary": "Update passkey verification", + "operationId": "accountUpdatePasskeyVerification", + "tags": [ + "account" + ], + "description": "Complete a passkey registration started with [Create passkey](\/docs\/references\/cloud\/client-web\/account#createPasskey). Pass the JSON form of the credential returned by `navigator.credentials.create()`, for example `credential.toJSON()`. Each registration can be verified once; a failed attempt requires starting it again.", + "responses": { + "200": { + "description": "Passkey", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkey" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "account\/update-passkey-verification.md", + "rate-limit": 10, + "rate-time": 3600, + "rate-key": "url:{url},userId:{userId}", + "scope": "account", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "parameters": [ + { + "name": "passkeyId", + "description": "Passkey ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "credential": { + "description": "Registration credential returned by the authenticator, in the JSON form produced by `PublicKeyCredential.toJSON()`.", + "type": "object", + "default": {}, + "example": {} + } + }, + "required": [ + "credential" + ] + } + } + } + } + } + }, "\/account\/password": { "patch": { "summary": "Update password", @@ -5428,6 +5893,17 @@ "default": [] }, "in": "query" + }, + { + "name": "state", + "description": "An opaque value your app generates and keeps, for example in a cookie. It is returned unchanged as the `state` query parameter on the success and failure URLs, so your app can check that the sign-in it receives is one it started. Printable ASCII only (RFC 6749 Appendix A.5). Max length: 256 chars.", + "required": false, + "schema": { + "type": "string", + "example": "", + "default": "" + }, + "in": "query" } ] } @@ -6721,25 +7197,36 @@ "default": [] }, "in": "query" + }, + { + "name": "state", + "description": "An opaque value your app generates and keeps, for example in a cookie. It is returned unchanged as the `state` query parameter on the success and failure URLs, so your app can check that the sign-in it receives is one it started. Printable ASCII only (RFC 6749 Appendix A.5). Max length: 256 chars.", + "required": false, + "schema": { + "type": "string", + "example": "", + "default": "" + }, + "in": "query" } ] } }, - "\/account\/tokens\/phone": { + "\/account\/tokens\/passkey": { "post": { - "summary": "Create phone token", - "operationId": "accountCreatePhoneToken", + "summary": "Create passkey token", + "operationId": "accountCreatePasskeyToken", "tags": [ "account" ], - "description": "Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.\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": "Start signing in with a passkey. No email or user ID is needed: pass the returned `publicKey` options to `navigator.credentials.get()` and the user picks one of their passkeys. Then call [Update passkey token](\/docs\/references\/cloud\/client-web\/account#updatePasskeyToken) with the credential to receive a token, and exchange it with [Create session](\/docs\/references\/cloud\/client-web\/account#createSession). The challenge expires after 5 minutes.", "responses": { "201": { - "description": "Token", + "description": "Passkey Challenge", "content": { "application\/json": { "schema": { - "$ref": "#\/components\/schemas\/token" + "$ref": "#\/components\/schemas\/passkeyChallenge" } } } @@ -6748,13 +7235,65 @@ "deprecated": false, "x-appwrite": { "group": "tokens", - "demo": "account\/create-phone-token.md", + "demo": "account\/create-passkey-token.md", "rate-limit": 10, "rate-time": 3600, - "rate-key": [ - "url:{url},phone:{param-phone}", - "url:{url},ip:{ip}" + "rate-key": "url:{url},ip:{ip}", + "scope": "sessions.write", + "platforms": [ + "console", + "client", + "server" ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ] + }, + "put": { + "summary": "Update passkey token", + "operationId": "accountUpdatePasskeyToken", + "tags": [ + "account" + ], + "description": "Complete a passkey sign-in started with [Create passkey token](\/docs\/references\/cloud\/client-web\/account#createPasskeyToken). Pass the challenge ID and the JSON form of the credential returned by `navigator.credentials.get()`, for example `credential.toJSON()`. The returned token includes its secret and expires after 1 minute: exchange it for a session with [Create session](\/docs\/references\/cloud\/client-web\/account#createSession). Passkeys require user verification, so the session also satisfies MFA. Each challenge can only be used once.", + "responses": { + "201": { + "description": "Token Secret", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/tokenSecret" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "tokens", + "demo": "account\/update-passkey-token.md", + "rate-limit": 10, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", "scope": "sessions.write", "platforms": [ "console", @@ -6789,21 +7328,21 @@ "schema": { "type": "object", "properties": { - "userId": { - "description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.", + "challengeId": { + "description": "Challenge ID returned by createPasskeyToken.", "type": "string", - "example": "" + "example": "" }, - "phone": { - "description": "Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.", - "type": "string", - "example": "+12065550100", - "format": "phone" + "credential": { + "description": "Authentication credential returned by the authenticator, in the JSON form produced by `PublicKeyCredential.toJSON()`.", + "type": "object", + "default": {}, + "example": {} } }, "required": [ - "userId", - "phone" + "challengeId", + "credential" ] } } @@ -6811,14 +7350,14 @@ } } }, - "\/account\/verifications\/email": { + "\/account\/tokens\/phone": { "post": { - "summary": "Create email verification", - "operationId": "accountCreateEmailVerification", + "summary": "Create phone token", + "operationId": "accountCreatePhoneToken", "tags": [ "account" ], - "description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n", + "description": "Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.\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": "Token", @@ -6833,12 +7372,15 @@ }, "deprecated": false, "x-appwrite": { - "group": "verification", - "demo": "account\/create-email-verification.md", + "group": "tokens", + "demo": "account\/create-phone-token.md", "rate-limit": 10, "rate-time": 3600, - "rate-key": "url:{url},userId:{userId}", - "scope": "account", + "rate-key": [ + "url:{url},phone:{param-phone}", + "url:{url},ip:{ip}" + ], + "scope": "sessions.write", "platforms": [ "console", "client", @@ -6846,86 +7388,6 @@ ], "packaging": false, "public": true, - "methods": [ - { - "name": "createEmailVerification", - "namespace": "account", - "platforms": [ - "console", - "client", - "server" - ], - "summary": "", - "auth": { - "console": { - "Project": [] - }, - "client": { - "Project": [] - }, - "server": { - "Project": [], - "Session": [] - } - }, - "parameters": [ - "url" - ], - "required": [ - "url" - ], - "responses": [ - { - "code": 201, - "model": "#\/components\/schemas\/token" - } - ], - "description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n", - "demo": "account\/create-email-verification.md", - "public": true - }, - { - "name": "createVerification", - "namespace": "account", - "platforms": [ - "console", - "client", - "server" - ], - "summary": "", - "auth": { - "console": { - "Project": [] - }, - "client": { - "Project": [] - }, - "server": { - "Project": [], - "Session": [] - } - }, - "parameters": [ - "url" - ], - "required": [ - "url" - ], - "responses": [ - { - "code": 201, - "model": "#\/components\/schemas\/token" - } - ], - "description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n", - "demo": "account\/create-verification.md", - "public": false, - "deprecated": { - "since": "1.8.0", - "replaceWith": "account.createEmailVerification" - } - } - ], "auth": { "console": { "Project": [] @@ -6952,30 +7414,38 @@ "schema": { "type": "object", "properties": { - "url": { - "description": "URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.", + "userId": { + "description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.", "type": "string", - "example": "https:\/\/example.com", - "format": "url" + "example": "" + }, + "phone": { + "description": "Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.", + "type": "string", + "example": "+12065550100", + "format": "phone" } }, "required": [ - "url" + "userId", + "phone" ] } } } } - }, - "put": { - "summary": "Update email verification (confirmation)", - "operationId": "accountUpdateEmailVerification", + } + }, + "\/account\/verifications\/email": { + "post": { + "summary": "Create email verification", + "operationId": "accountCreateEmailVerification", "tags": [ "account" ], - "description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.", + "description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n", "responses": { - "200": { + "201": { "description": "Token", "content": { "application\/json": { @@ -6989,11 +7459,11 @@ "deprecated": false, "x-appwrite": { "group": "verification", - "demo": "account\/update-email-verification.md", + "demo": "account\/create-email-verification.md", "rate-limit": 10, "rate-time": 3600, - "rate-key": "url:{url},userId:{param-userId}", - "scope": "public", + "rate-key": "url:{url},userId:{userId}", + "scope": "account", "platforms": [ "console", "client", @@ -7003,7 +7473,7 @@ "public": true, "methods": [ { - "name": "updateEmailVerification", + "name": "createEmailVerification", "namespace": "account", "platforms": [ "console", @@ -7024,25 +7494,23 @@ } }, "parameters": [ - "userId", - "secret" + "url" ], "required": [ - "userId", - "secret" + "url" ], "responses": [ { - "code": 200, + "code": 201, "model": "#\/components\/schemas\/token" } ], - "description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.", - "demo": "account\/update-email-verification.md", + "description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n", + "demo": "account\/create-email-verification.md", "public": true }, { - "name": "updateVerification", + "name": "createVerification", "namespace": "account", "platforms": [ "console", @@ -7063,25 +7531,182 @@ } }, "parameters": [ - "userId", - "secret" + "url" ], "required": [ - "userId", - "secret" + "url" ], "responses": [ { - "code": 200, + "code": 201, "model": "#\/components\/schemas\/token" } ], - "description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.", - "demo": "account\/update-verification.md", + "description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n", + "demo": "account\/create-verification.md", "public": false, "deprecated": { "since": "1.8.0", - "replaceWith": "account.updateEmailVerification" + "replaceWith": "account.createEmailVerification" + } + } + ], + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + } + }, + "security": [ + { + "Project": [], + "Session": [], + "JWT": [] + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "url": { + "description": "URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.", + "type": "string", + "example": "https:\/\/example.com", + "format": "url" + } + }, + "required": [ + "url" + ] + } + } + } + } + }, + "put": { + "summary": "Update email verification (confirmation)", + "operationId": "accountUpdateEmailVerification", + "tags": [ + "account" + ], + "description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.", + "responses": { + "200": { + "description": "Token", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/token" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "verification", + "demo": "account\/update-email-verification.md", + "rate-limit": 10, + "rate-time": 3600, + "rate-key": "url:{url},userId:{param-userId}", + "scope": "public", + "platforms": [ + "console", + "client", + "server" + ], + "packaging": false, + "public": true, + "methods": [ + { + "name": "updateEmailVerification", + "namespace": "account", + "platforms": [ + "console", + "client", + "server" + ], + "summary": "", + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + }, + "parameters": [ + "userId", + "secret" + ], + "required": [ + "userId", + "secret" + ], + "responses": [ + { + "code": 200, + "model": "#\/components\/schemas\/token" + } + ], + "description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.", + "demo": "account\/update-email-verification.md", + "public": true + }, + { + "name": "updateVerification", + "namespace": "account", + "platforms": [ + "console", + "client", + "server" + ], + "summary": "", + "auth": { + "console": { + "Project": [] + }, + "client": { + "Project": [] + }, + "server": { + "Project": [], + "Session": [] + } + }, + "parameters": [ + "userId", + "secret" + ], + "required": [ + "userId", + "secret" + ], + "responses": [ + { + "code": 200, + "model": "#\/components\/schemas\/token" + } + ], + "description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.", + "demo": "account\/update-verification.md", + "public": false, + "deprecated": { + "since": "1.8.0", + "replaceWith": "account.updateEmailVerification" } } ], @@ -7557,6 +8182,376 @@ ] } }, + "\/admin\/cache\/platform": { + "delete": { + "summary": "Delete platform cache", + "operationId": "adminDeletePlatformCache", + "tags": [ + "admin" + ], + "description": "Delete everything cached from the platform database in the region serving the request.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "cache", + "demo": "admin\/delete-platform-cache.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "console", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + } + } + }, + "security": [ + { + "Project": [] + } + ] + } + }, + "\/admin\/cache\/platform\/resources": { + "delete": { + "summary": "Delete platform resource cache", + "operationId": "adminDeletePlatformResourceCache", + "tags": [ + "admin" + ], + "description": "Delete the cache of one platform resource, or of every resource of a type, in the region serving the request.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "cache", + "demo": "admin\/delete-platform-resource-cache.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "console", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + } + } + }, + "security": [ + { + "Project": [] + } + ], + "parameters": [ + { + "name": "resourceType", + "description": "Resource type.", + "required": true, + "schema": { + "type": "string", + "example": "projects", + "title": "PlatformResourceType", + "oneOf": [ + { + "type": "string", + "enum": [ + "projects" + ], + "title": "projects" + }, + { + "type": "string", + "enum": [ + "organizations" + ], + "title": "organizations" + }, + { + "type": "string", + "enum": [ + "users" + ], + "title": "users" + }, + { + "type": "string", + "enum": [ + "memberships" + ], + "title": "memberships" + }, + { + "type": "string", + "enum": [ + "rules" + ], + "title": "rules" + }, + { + "type": "string", + "enum": [ + "keys" + ], + "title": "keys" + }, + { + "type": "string", + "enum": [ + "platforms" + ], + "title": "platforms" + }, + { + "type": "string", + "enum": [ + "webhooks" + ], + "title": "webhooks" + }, + { + "type": "string", + "enum": [ + "certificates" + ], + "title": "certificates" + } + ] + }, + "in": "query" + }, + { + "name": "resourceId", + "description": "Resource ID. Leave empty to delete the cache of every resource of this type.", + "required": false, + "schema": { + "type": "string", + "example": "", + "default": "" + }, + "in": "query" + } + ] + } + }, + "\/admin\/cache\/project": { + "delete": { + "summary": "Delete project cache", + "operationId": "adminDeleteProjectCache", + "tags": [ + "admin" + ], + "description": "Delete everything cached for a project. Send the request to the project's region.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "cache", + "demo": "admin\/delete-project-cache.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "console", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + } + } + }, + "security": [ + { + "Project": [] + } + ], + "parameters": [ + { + "name": "projectId", + "description": "Project ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "query" + } + ] + } + }, + "\/admin\/cache\/project\/resources": { + "delete": { + "summary": "Delete project resource cache", + "operationId": "adminDeleteProjectResourceCache", + "tags": [ + "admin" + ], + "description": "Delete the cache of one project resource, or of every resource of a type. Send the request to the project's region.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "cache", + "demo": "admin\/delete-project-resource-cache.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "console", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + } + } + }, + "security": [ + { + "Project": [] + } + ], + "parameters": [ + { + "name": "projectId", + "description": "Project ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "query" + }, + { + "name": "resourceType", + "description": "Resource type.", + "required": true, + "schema": { + "type": "string", + "example": "users", + "title": "ProjectResourceType", + "oneOf": [ + { + "type": "string", + "enum": [ + "users" + ], + "title": "users" + }, + { + "type": "string", + "enum": [ + "teams" + ], + "title": "teams" + }, + { + "type": "string", + "enum": [ + "memberships" + ], + "title": "memberships" + }, + { + "type": "string", + "enum": [ + "databases" + ], + "title": "databases" + }, + { + "type": "string", + "enum": [ + "buckets" + ], + "title": "buckets" + }, + { + "type": "string", + "enum": [ + "functions" + ], + "title": "functions" + }, + { + "type": "string", + "enum": [ + "sites" + ], + "title": "sites" + }, + { + "type": "string", + "enum": [ + "deployments" + ], + "title": "deployments" + }, + { + "type": "string", + "enum": [ + "topics" + ], + "title": "topics" + }, + { + "type": "string", + "enum": [ + "providers" + ], + "title": "providers" + }, + { + "type": "string", + "enum": [ + "messages" + ], + "title": "messages" + } + ] + }, + "in": "query" + }, + { + "name": "resourceId", + "description": "Resource ID. Leave empty to delete the cache of every resource of this type.", + "required": false, + "schema": { + "type": "string", + "example": "", + "default": "" + }, + "in": "query" + } + ] + } + }, "\/affiliates\/links": { "get": { "summary": "List affiliate links", @@ -8052,7 +9047,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: name, domain, timezone, enabled, public, snippetId", + "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, enabled, public", "required": false, "schema": { "type": "array", @@ -8158,12 +9153,6 @@ "default": "", "example": "" }, - "timezone": { - "description": "IANA timezone used for daily boundaries.", - "type": "string", - "default": "UTC", - "example": "" - }, "enabled": { "description": "Whether tracking is enabled.", "type": "boolean", @@ -8339,12 +9328,6 @@ "example": "", "nullable": true }, - "timezone": { - "description": "IANA timezone used for daily boundaries.", - "type": "string", - "example": "", - "nullable": true - }, "enabled": { "description": "Whether tracking is enabled.", "type": "boolean", @@ -8489,7 +9472,7 @@ "parameters": [ { "name": "propertyId", - "description": "Analytics property ID or snippet ID identifying the property.", + "description": "Analytics property ID.", "required": true, "schema": { "type": "string", @@ -8547,9 +9530,10 @@ "format": "int32" }, "engagementTime": { - "description": "Engagement time in seconds.", + "description": "Engagement time in seconds, 0-4294967295.", "type": "integer", "default": 0, + "example": 0, "format": "int32" }, "props": { @@ -17726,238 +18710,28 @@ ], "parameters": [ { - "name": "policyId", - "description": "Policy ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", - "required": true, - "schema": { - "type": "string", - "example": "" - }, - "in": "path" - } - ] - } - }, - "\/backups\/restoration": { - "post": { - "summary": "Create restoration", - "operationId": "backupsCreateRestoration", - "tags": [ - "backups" - ], - "description": "Create and trigger a new restoration for a backup on a project.\n\nFor a backup of one database, the restoration resolves its destination before it is queued. When `newResourceId` is omitted, the archived database is restored in place and its own ID is returned in `options`. Pass a different `newResourceId` to restore alongside it as a new database instead.\n\nThe restoration migration records the archived database in `resourceId` and `resourceType`, and the resolved database in `destinationResourceId` and `destinationResourceType`. Database types are stored canonically as `database`, `documentsdb`, or `vectorsdb`. Project-wide restorations leave these fields empty because they do not have a single source or destination database.\n\nTo list every migration related to one database, use its canonical type in a nested `OR(AND(...), AND(...), AND(...))` across the root, parent, and destination relation pairs: `(resourceType, resourceId)`, `(parentResourceType, parentResourceId)`, and `(destinationResourceType, destinationResourceId)`. Legacy and TablesDB databases use `database`; the operational `resourceType` of a table migration is not rewritten to `tablesdb`.\n\nWhen restoring a DocumentsDB or VectorsDB database from a dedicated source, the restore provisions a fresh dedicated backing database at the source database's own specification and lands the data there. An in-place restore swaps the database onto that backing only once the restore has succeeded, and retires the backing it displaced only once that swap is confirmed, so the source keeps serving its own data until the restored data is in place and any failure leaves it untouched. A serverless source has no dedicated backing to clone and restores onto the archived database instead.\n", - "responses": { - "201": { - "description": "Restoration", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/backupRestoration" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": null, - "demo": "backups\/create-restoration.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "restorations.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": { - "archiveId": { - "description": "Backup archive ID to restore", - "type": "string", - "example": "" - }, - "services": { - "description": "Array of services to restore", - "type": "array", - "items": { - "title": "BackupServices", - "type": "string", - "oneOf": [ - { - "type": "string", - "enum": [ - "databases" - ], - "title": "databases" - }, - { - "type": "string", - "enum": [ - "tablesdb" - ], - "title": "tablesdb" - }, - { - "type": "string", - "enum": [ - "documentsdb" - ], - "title": "documentsdb" - }, - { - "type": "string", - "enum": [ - "vectorsdb" - ], - "title": "vectorsdb" - }, - { - "type": "string", - "enum": [ - "dedicatedDatabases" - ], - "title": "dedicatedDatabases" - }, - { - "type": "string", - "enum": [ - "functions" - ], - "title": "functions" - }, - { - "type": "string", - "enum": [ - "storage" - ], - "title": "storage" - } - ] - } - }, - "newResourceId": { - "description": "Destination resource ID. Omit to restore the archived resource in place, or pass a different ID to restore alongside it as a new resource. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", - "type": "string", - "default": "", - "example": "" - }, - "newResourceName": { - "description": "Database name. Max length: 128 chars.", - "type": "string", - "default": "", - "example": "" - } - }, - "required": [ - "archiveId", - "services" - ] - } - } - } - } - } - }, - "\/backups\/restorations": { - "get": { - "summary": "List restorations", - "operationId": "backupsListRestorations", - "tags": [ - "backups" - ], - "description": "List all backup restorations for a project.", - "responses": { - "200": { - "description": "Backup restoration list", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/backupRestorationList" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": null, - "demo": "backups\/list-restorations.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "restorations.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.", - "required": false, + "name": "policyId", + "description": "Policy ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - }, - "default": [] + "type": "string", + "example": "" }, - "in": "query" + "in": "path" } ] } }, - "\/backups\/restorations\/{restorationId}": { - "get": { - "summary": "Get backup restoration", - "operationId": "backupsGetRestoration", + "\/backups\/restoration": { + "post": { + "summary": "Create restoration", + "operationId": "backupsCreateRestoration", "tags": [ "backups" ], - "description": "Get the current status of a backup restoration.", + "description": "Create and trigger a new restoration for a backup on a project.\n\nFor a backup of one database, the restoration resolves its destination before it is queued. When `newResourceId` is omitted, the archived database is restored in place and its own ID is returned in `options`. Pass a different `newResourceId` to restore alongside it as a new database instead.\n\nThe restoration migration records the archived database in `resourceId` and `resourceType`, and the resolved database in `destinationResourceId` and `destinationResourceType`. Database types are stored canonically as `database`, `documentsdb`, or `vectorsdb`. Project-wide restorations leave these fields empty because they do not have a single source or destination database.\n\nTo list every migration related to one database, use its canonical type in a nested `OR(AND(...), AND(...), AND(...))` across the root, parent, and destination relation pairs: `(resourceType, resourceId)`, `(parentResourceType, parentResourceId)`, and `(destinationResourceType, destinationResourceId)`. Legacy and TablesDB databases use `database`; the operational `resourceType` of a table migration is not rewritten to `tablesdb`.\n\nWhen restoring a DocumentsDB or VectorsDB database from a dedicated source, the restore provisions a fresh dedicated backing database at the source database's own specification and lands the data there. An in-place restore swaps the database onto that backing only once the restore has succeeded, and retires the backing it displaced only once that swap is confirmed, so the source keeps serving its own data until the restored data is in place and any failure leaves it untouched. A serverless source has no dedicated backing to clone and restores onto the archived database instead.\n", "responses": { - "200": { + "201": { "description": "Restoration", "content": { "application\/json": { @@ -17971,7 +18745,150 @@ "deprecated": false, "x-appwrite": { "group": null, - "demo": "backups\/get-restoration.md", + "demo": "backups\/create-restoration.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "restorations.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": { + "archiveId": { + "description": "Backup archive ID to restore", + "type": "string", + "example": "" + }, + "services": { + "description": "Array of services to restore", + "type": "array", + "items": { + "title": "BackupServices", + "type": "string", + "oneOf": [ + { + "type": "string", + "enum": [ + "databases" + ], + "title": "databases" + }, + { + "type": "string", + "enum": [ + "tablesdb" + ], + "title": "tablesdb" + }, + { + "type": "string", + "enum": [ + "documentsdb" + ], + "title": "documentsdb" + }, + { + "type": "string", + "enum": [ + "vectorsdb" + ], + "title": "vectorsdb" + }, + { + "type": "string", + "enum": [ + "dedicatedDatabases" + ], + "title": "dedicatedDatabases" + }, + { + "type": "string", + "enum": [ + "functions" + ], + "title": "functions" + }, + { + "type": "string", + "enum": [ + "storage" + ], + "title": "storage" + } + ] + } + }, + "newResourceId": { + "description": "Destination resource ID. Omit to restore the archived resource in place, or pass a different ID to restore alongside it as a new resource. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", + "type": "string", + "default": "", + "example": "" + }, + "newResourceName": { + "description": "Database name. Max length: 128 chars.", + "type": "string", + "default": "", + "example": "" + } + }, + "required": [ + "archiveId", + "services" + ] + } + } + } + } + } + }, + "\/backups\/restorations": { + "get": { + "summary": "List restorations", + "operationId": "backupsListRestorations", + "tags": [ + "backups" + ], + "description": "List all backup restorations for a project.", + "responses": { + "200": { + "description": "Backup restoration list", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/backupRestorationList" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": null, + "demo": "backups\/list-restorations.md", "rate-limit": 0, "rate-time": 3600, "rate-key": "url:{url},ip:{ip}", @@ -18000,33 +18917,36 @@ ], "parameters": [ { - "name": "restorationId", - "description": "Restoration ID. Choose a custom ID`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", - "required": true, + "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.", + "required": false, "schema": { - "type": "string", - "example": "" + "type": "array", + "items": { + "type": "string" + }, + "default": [] }, - "in": "path" + "in": "query" } ] } }, - "\/console\/assistant": { - "post": { - "summary": "Create assistant query", - "operationId": "assistantChat", + "\/backups\/restorations\/{restorationId}": { + "get": { + "summary": "Get backup restoration", + "operationId": "backupsGetRestoration", "tags": [ - "assistant" + "backups" ], - "description": "Send a prompt to the AI assistant and receive a response. This endpoint allows you to interact with Appwrite's AI assistant by sending questions or prompts and receiving helpful responses in real-time through a server-sent events stream. ", + "description": "Get the current status of a backup restoration.", "responses": { "200": { - "description": "Text", + "description": "Restoration", "content": { - "text\/plain": { + "application\/json": { "schema": { - "type": "string" + "$ref": "#\/components\/schemas\/backupRestoration" } } } @@ -18034,47 +18954,46 @@ }, "deprecated": false, "x-appwrite": { - "group": "console", - "demo": "assistant\/chat.md", - "rate-limit": 15, + "group": null, + "demo": "backups\/get-restoration.md", + "rate-limit": 0, "rate-time": 3600, - "rate-key": "userId:{userId}", - "scope": "assistant.read", + "rate-key": "url:{url},ip:{ip}", + "scope": "restorations.read", "platforms": [ - "console" + "console", + "server" ], "packaging": false, "public": true, "auth": { "console": { "Project": [] + }, + "server": { + "Project": [], + "Key": [] } } }, "security": [ { - "Project": [] + "Project": [], + "Key": [] } ], - "requestBody": { - "content": { - "application\/json": { - "schema": { - "type": "object", - "properties": { - "prompt": { - "description": "Prompt. A string containing questions asked to the AI assistant.", - "type": "string", - "example": "" - } - }, - "required": [ - "prompt" - ] - } - } + "parameters": [ + { + "name": "restorationId", + "description": "Restoration ID. Choose a custom ID`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" } - } + ] } }, "\/console\/campaigns\/{campaignId}": { @@ -38878,6 +39797,27 @@ ], "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": [ @@ -40760,6 +41700,27 @@ ], "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": [ @@ -41733,6 +42694,27 @@ ], "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": [ @@ -76455,7 +77437,7 @@ "parameters": [ { "name": "methodId", - "description": "Auth Method ID. Possible values: email-password,magic-url,email-otp,anonymous,invites,jwt,phone", + "description": "Auth Method ID. Possible values: email-password,magic-url,email-otp,anonymous,invites,jwt,phone,passkey", "required": true, "schema": { "type": "string", @@ -76510,6 +77492,13 @@ "phone" ], "title": "phone" + }, + { + "type": "string", + "enum": [ + "passkey" + ], + "title": "passkey" } ] }, @@ -86630,177 +87619,273 @@ "schema": { "type": "object", "properties": { - "enabled": { - "description": "Set whether or not to restrict sign-ups and email updates to corporate email addresses only.", + "enabled": { + "description": "Set whether or not to restrict sign-ups and email updates to corporate email addresses only.", + "type": "boolean", + "example": false + } + }, + "required": [ + "enabled" + ] + } + } + } + } + } + }, + "\/project\/policies\/deny-disposable-email": { + "patch": { + "summary": "Update deny disposable email policy", + "operationId": "projectUpdateDenyDisposableEmailPolicy", + "tags": [ + "project" + ], + "description": "Configures if disposable emails from known temporary domains are denied during new users sign-ups and email updates.", + "responses": { + "200": { + "description": "Project", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/project" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "policies", + "demo": "project\/update-deny-disposable-email-policy.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": [ + "policies.write", + "project.policies.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": { + "enabled": { + "description": "Set whether or not to block disposable email addresses during signup and email updates.", + "type": "boolean", + "example": false + } + }, + "required": [ + "enabled" + ] + } + } + } + } + } + }, + "\/project\/policies\/deny-free-email": { + "patch": { + "summary": "Update deny free email policy", + "operationId": "projectUpdateDenyFreeEmailPolicy", + "tags": [ + "project" + ], + "description": "Configures if emails from free providers such as Gmail or Yahoo are denied during new users sign-ups and email updates.", + "responses": { + "200": { + "description": "Project", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/project" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "policies", + "demo": "project\/update-deny-free-email-policy.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": [ + "policies.write", + "project.policies.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": { + "enabled": { + "description": "Set whether or not to block free email addresses during signup and email updates.", + "type": "boolean", + "example": false + } + }, + "required": [ + "enabled" + ] + } + } + } + } + } + }, + "\/project\/policies\/membership-privacy": { + "patch": { + "summary": "Update membership privacy policy", + "operationId": "projectUpdateMembershipPrivacyPolicy", + "tags": [ + "project" + ], + "description": "Updating this policy allows you to control if team members can see other members information. When enabled, all team members can see ID, name, email, phone number, and MFA status of other members..", + "responses": { + "200": { + "description": "Project", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/project" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "policies", + "demo": "project\/update-membership-privacy-policy.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": [ + "policies.write", + "project.policies.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": { + "userId": { + "description": "Set to true if you want make user ID visible to all team members, or false to hide it.", "type": "boolean", "example": false - } - }, - "required": [ - "enabled" - ] - } - } - } - } - } - }, - "\/project\/policies\/deny-disposable-email": { - "patch": { - "summary": "Update deny disposable email policy", - "operationId": "projectUpdateDenyDisposableEmailPolicy", - "tags": [ - "project" - ], - "description": "Configures if disposable emails from known temporary domains are denied during new users sign-ups and email updates.", - "responses": { - "200": { - "description": "Project", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/project" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": "policies", - "demo": "project\/update-deny-disposable-email-policy.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": [ - "policies.write", - "project.policies.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": { - "enabled": { - "description": "Set whether or not to block disposable email addresses during signup and email updates.", + }, + "userEmail": { + "description": "Set to true if you want make user email visible to all team members, or false to hide it.", "type": "boolean", "example": false - } - }, - "required": [ - "enabled" - ] - } - } - } - } - } - }, - "\/project\/policies\/deny-free-email": { - "patch": { - "summary": "Update deny free email policy", - "operationId": "projectUpdateDenyFreeEmailPolicy", - "tags": [ - "project" - ], - "description": "Configures if emails from free providers such as Gmail or Yahoo are denied during new users sign-ups and email updates.", - "responses": { - "200": { - "description": "Project", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/project" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": "policies", - "demo": "project\/update-deny-free-email-policy.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": [ - "policies.write", - "project.policies.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": { - "enabled": { - "description": "Set whether or not to block free email addresses during signup and email updates.", + }, + "userPhone": { + "description": "Set to true if you want make user phone number visible to all team members, or false to hide it.", + "type": "boolean", + "example": false + }, + "userName": { + "description": "Set to true if you want make user name visible to all team members, or false to hide it.", + "type": "boolean", + "example": false + }, + "userMFA": { + "description": "Set to true if you want make user MFA status visible to all team members, or false to hide it.", + "type": "boolean", + "example": false + }, + "userAccessedAt": { + "description": "Set to true if you want make user last access time visible to all team members, or false to hide it.", "type": "boolean", "example": false } - }, - "required": [ - "enabled" - ] + } } } } } } }, - "\/project\/policies\/membership-privacy": { + "\/project\/policies\/mfa-factors": { "patch": { - "summary": "Update membership privacy policy", - "operationId": "projectUpdateMembershipPrivacyPolicy", + "summary": "Update MFA factors policy", + "operationId": "projectUpdateMFAFactorsPolicy", "tags": [ "project" ], - "description": "Updating this policy allows you to control if team members can see other members information. When enabled, all team members can see ID, name, email, phone number, and MFA status of other members..", + "description": "Updating this policy allows you to control which factors users can use to complete an MFA challenge. Disabled factors cannot be used to create a challenge and are reported as unavailable when listing factors. The custom factor is disabled by default; enable it to deliver challenge codes through your own channel. Recovery codes always remain available as a fallback.", "responses": { "200": { "description": "Project", @@ -86816,7 +87901,7 @@ "deprecated": false, "x-appwrite": { "group": "policies", - "demo": "project\/update-membership-privacy-policy.md", + "demo": "project\/update-mfa-factors-policy.md", "rate-limit": 0, "rate-time": 3600, "rate-key": "url:{url},ip:{ip}", @@ -86852,33 +87937,23 @@ "schema": { "type": "object", "properties": { - "userId": { - "description": "Set to true if you want make user ID visible to all team members, or false to hide it.", - "type": "boolean", - "example": false - }, - "userEmail": { - "description": "Set to true if you want make user email visible to all team members, or false to hide it.", - "type": "boolean", - "example": false - }, - "userPhone": { - "description": "Set to true if you want make user phone number visible to all team members, or false to hide it.", + "totp": { + "description": "Set to true to allow TOTP to complete an MFA challenge, or false to disable it.", "type": "boolean", "example": false }, - "userName": { - "description": "Set to true if you want make user name visible to all team members, or false to hide it.", + "email": { + "description": "Set to true to allow email to complete an MFA challenge, or false to disable it.", "type": "boolean", "example": false }, - "userMFA": { - "description": "Set to true if you want make user MFA status visible to all team members, or false to hide it.", + "phone": { + "description": "Set to true to allow phone (SMS) to complete an MFA challenge, or false to disable it.", "type": "boolean", "example": false }, - "userAccessedAt": { - "description": "Set to true if you want make user last access time visible to all team members, or false to hide it.", + "custom": { + "description": "Set to true to allow the custom factor to complete an MFA challenge, or false to disable it.", "type": "boolean", "example": false } @@ -86889,14 +87964,14 @@ } } }, - "\/project\/policies\/mfa-factors": { + "\/project\/policies\/passkey": { "patch": { - "summary": "Update MFA factors policy", - "operationId": "projectUpdateMFAFactorsPolicy", + "summary": "Update passkey policy", + "operationId": "projectUpdatePasskeyPolicy", "tags": [ "project" ], - "description": "Updating this policy allows you to control which factors users can use to complete an MFA challenge. Disabled factors cannot be used to create a challenge and are reported as unavailable when listing factors. The custom factor is disabled by default; enable it to deliver challenge codes through your own channel. Recovery codes always remain available as a fallback.", + "description": "Configure the relying party passkeys are bound to. The relying party ID is the domain of your application, and origins are the exact web origins allowed to register and sign in with passkeys. Passkeys stay unavailable until both are set and the passkey auth method is enabled. The relying party ID cannot change while users have passkeys, and any change invalidates ceremonies in progress.", "responses": { "200": { "description": "Project", @@ -86912,7 +87987,7 @@ "deprecated": false, "x-appwrite": { "group": "policies", - "demo": "project\/update-mfa-factors-policy.md", + "demo": "project\/update-passkey-policy.md", "rate-limit": 0, "rate-time": 3600, "rate-key": "url:{url},ip:{ip}", @@ -86948,25 +88023,17 @@ "schema": { "type": "object", "properties": { - "totp": { - "description": "Set to true to allow TOTP to complete an MFA challenge, or false to disable it.", - "type": "boolean", - "example": false - }, - "email": { - "description": "Set to true to allow email to complete an MFA challenge, or false to disable it.", - "type": "boolean", - "example": false - }, - "phone": { - "description": "Set to true to allow phone (SMS) to complete an MFA challenge, or false to disable it.", - "type": "boolean", - "example": false + "rpId": { + "description": "Relying party ID: the domain of your application, such as `example.com`. Use `localhost` for local development.", + "type": "string", + "example": "" }, - "custom": { - "description": "Set to true to allow the custom factor to complete an MFA challenge, or false to disable it.", - "type": "boolean", - "example": false + "origins": { + "description": "Web origins allowed to use passkeys, such as `https:\/\/example.com` or `https:\/\/app.example.com`. Each must be HTTPS on the relying party ID or one of its subdomains, without a path. HTTP is only allowed for `localhost`. Maximum of 10 origins.", + "type": "array", + "items": { + "type": "string" + } } } } @@ -87756,7 +88823,7 @@ "description": "Get a policy by its unique ID. This endpoint returns the current configuration for the requested project policy.", "responses": { "200": { - "description": "Policy Password Dictionary, or Policy Password History, or Policy Password Strength, or Policy Password Personal Data, or Policy Password Pwned, or Policy Session Alert, or Policy Session Duration, or Policy Session Invalidation, or Policy Session Limit, or Policy User Limit, or Policy Membership Privacy, or Policy MFA Factors, or Policy Deny Aliased Email, or Policy Deny Disposable Email, or Policy Deny Free Email, or Policy Deny Corporate Email", + "description": "Policy Password Dictionary, or Policy Password History, or Policy Password Strength, or Policy Password Personal Data, or Policy Password Pwned, or Policy Session Alert, or Policy Session Duration, or Policy Session Invalidation, or Policy Session Limit, or Policy User Limit, or Policy Membership Privacy, or Policy MFA Factors, or Policy Deny Aliased Email, or Policy Deny Disposable Email, or Policy Deny Free Email, or Policy Deny Corporate Email, or Policy Passkey", "content": { "application\/json": { "schema": { @@ -87808,6 +88875,9 @@ }, { "$ref": "#\/components\/schemas\/policyDenyCorporateEmail" + }, + { + "$ref": "#\/components\/schemas\/policyPasskey" } ], "discriminator": { @@ -87828,7 +88898,8 @@ "deny-aliased-email": "#\/components\/schemas\/policyDenyAliasedEmail", "deny-disposable-email": "#\/components\/schemas\/policyDenyDisposableEmail", "deny-free-email": "#\/components\/schemas\/policyDenyFreeEmail", - "deny-corporate-email": "#\/components\/schemas\/policyDenyCorporateEmail" + "deny-corporate-email": "#\/components\/schemas\/policyDenyCorporateEmail", + "passkey": "#\/components\/schemas\/policyPasskey" } } } @@ -87872,7 +88943,7 @@ "parameters": [ { "name": "policyId", - "description": "Policy ID. Can be one of: password-dictionary, password-history, password-strength, password-personal-data, password-pwned, session-alert, session-duration, session-invalidation, session-limit, user-limit, membership-privacy, mfa-factors, deny-aliased-email, deny-disposable-email, deny-free-email, deny-corporate-email.", + "description": "Policy ID. Can be one of: password-dictionary, password-history, password-strength, password-personal-data, password-pwned, session-alert, session-duration, session-invalidation, session-limit, user-limit, membership-privacy, mfa-factors, deny-aliased-email, deny-disposable-email, deny-free-email, deny-corporate-email, passkey.", "required": true, "schema": { "type": "string", @@ -87990,6 +89061,13 @@ "deny-corporate-email" ], "title": "deny-corporate-email" + }, + { + "type": "string", + "enum": [ + "passkey" + ], + "title": "passkey" } ] }, @@ -94525,6 +95603,27 @@ ], "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": [ @@ -96977,6 +98076,27 @@ ], "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": [ @@ -100262,7 +101382,7 @@ "example": false }, "maximumFileSize": { - "description": "Maximum file size allowed in bytes. Maximum allowed value is 5GB.", + "description": "Maximum file size allowed in bytes. Maximum allowed value is 0B.", "type": "integer", "default": {}, "example": 1, @@ -100494,7 +101614,7 @@ "example": false }, "maximumFileSize": { - "description": "Maximum file size allowed in bytes. Maximum allowed value is 5GB.", + "description": "Maximum file size allowed in bytes. Maximum allowed value is 0B.", "type": "integer", "default": {}, "example": 1, @@ -117185,231 +118305,549 @@ "example": "" }, "in": "path" - } - ] - }, - "patch": { - "summary": "Create MFA recovery codes", - "operationId": "usersCreateMfaRecoveryCodes", - "tags": [ - "users" - ], - "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "responses": { - "201": { - "description": "MFA Recovery Codes", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/mfaRecoveryCodes" - } - } - } - } - }, - "deprecated": true, - "x-appwrite": { - "group": "mfa", - "demo": "users\/create-mfa-recovery-codes.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "users.write", - "platforms": [ - "console", - "server" - ], - "packaging": false, - "public": false, - "deprecated": { - "since": "1.8.0", - "replaceWith": "users.createMFARecoveryCodes" + } + ] + }, + "patch": { + "summary": "Create MFA recovery codes", + "operationId": "usersCreateMfaRecoveryCodes", + "tags": [ + "users" + ], + "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", + "responses": { + "201": { + "description": "MFA Recovery Codes", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/mfaRecoveryCodes" + } + } + } + } + }, + "deprecated": true, + "x-appwrite": { + "group": "mfa", + "demo": "users\/create-mfa-recovery-codes.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "users.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": false, + "deprecated": { + "since": "1.8.0", + "replaceWith": "users.createMFARecoveryCodes" + }, + "methods": [ + { + "name": "createMfaRecoveryCodes", + "namespace": "users", + "platforms": [ + "console", + "server" + ], + "summary": "", + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + }, + "parameters": [ + "userId" + ], + "required": [ + "userId" + ], + "responses": [ + { + "code": 201, + "model": "#\/components\/schemas\/mfaRecoveryCodes" + } + ], + "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", + "demo": "users\/create-mfa-recovery-codes.md", + "public": false, + "deprecated": { + "since": "1.8.0", + "replaceWith": "users.createMFARecoveryCodes" + } + }, + { + "name": "createMFARecoveryCodes", + "namespace": "users", + "platforms": [ + "console", + "server" + ], + "summary": "", + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + }, + "parameters": [ + "userId" + ], + "required": [ + "userId" + ], + "responses": [ + { + "code": 201, + "model": "#\/components\/schemas\/mfaRecoveryCodes" + } + ], + "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", + "demo": "users\/create-mfa-recovery-codes.md", + "public": true + } + ], + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "userId", + "description": "User ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ] + } + }, + "\/users\/{userId}\/name": { + "patch": { + "summary": "Update name", + "operationId": "usersUpdateName", + "tags": [ + "users" + ], + "description": "Update the user name by its unique ID.", + "responses": { + "200": { + "description": "User", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/user" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "users", + "demo": "users\/update-name.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "users.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "userId", + "description": "User ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "description": "User name. Max length: 128 chars.", + "type": "string", + "example": "" + } + }, + "required": [ + "name" + ] + } + } + } + } + } + }, + "\/users\/{userId}\/passkeys": { + "get": { + "summary": "List user passkeys", + "operationId": "usersListPasskeys", + "tags": [ + "users" + ], + "description": "Get the list of verified passkeys registered by a user.", + "responses": { + "200": { + "description": "Passkeys List", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkeyList" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "users\/list-passkeys.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "users.read", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "userId", + "description": "User ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + }, + { + "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 and order on the following attributes: $id, $createdAt, $updatedAt, name, accessedAt", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "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" + } + ] + } + }, + "\/users\/{userId}\/passkeys\/{passkeyId}": { + "get": { + "summary": "Get user passkey", + "operationId": "usersGetPasskey", + "tags": [ + "users" + ], + "description": "Get a verified passkey of a user by its unique ID.", + "responses": { + "200": { + "description": "Passkey", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkey" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "users\/get-passkey.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "users.read", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "userId", + "description": "User ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + }, + { + "name": "passkeyId", + "description": "Passkey ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ] + }, + "patch": { + "summary": "Update user passkey", + "operationId": "usersUpdatePasskey", + "tags": [ + "users" + ], + "description": "Rename a passkey of a user.", + "responses": { + "200": { + "description": "Passkey", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/passkey" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "users\/update-passkey.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "users.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "userId", + "description": "User ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + }, + { + "name": "passkeyId", + "description": "Passkey ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "description": "Passkey name. Max length: 128 chars.", + "type": "string", + "example": "" + } + }, + "required": [ + "name" + ] + } + } + } + } + }, + "delete": { + "summary": "Delete user passkey", + "operationId": "usersDeletePasskey", + "tags": [ + "users" + ], + "description": "Delete a passkey from a user, for example when a device is lost. The passkey can no longer be used to sign in.", + "responses": { + "204": { + "description": "No content" + } + }, + "deprecated": false, + "x-appwrite": { + "group": "passkeys", + "demo": "users\/delete-passkey.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "users.write", + "platforms": [ + "console", + "server" + ], + "packaging": false, + "public": true, + "auth": { + "console": { + "Project": [] + }, + "server": { + "Project": [], + "Key": [] + } + } + }, + "security": [ + { + "Project": [], + "Key": [] + } + ], + "parameters": [ + { + "name": "userId", + "description": "User ID.", + "required": true, + "schema": { + "type": "string", + "example": "" + }, + "in": "path" }, - "methods": [ - { - "name": "createMfaRecoveryCodes", - "namespace": "users", - "platforms": [ - "console", - "server" - ], - "summary": "", - "auth": { - "console": { - "Project": [] - }, - "server": { - "Project": [], - "Key": [] - } - }, - "parameters": [ - "userId" - ], - "required": [ - "userId" - ], - "responses": [ - { - "code": 201, - "model": "#\/components\/schemas\/mfaRecoveryCodes" - } - ], - "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md", - "public": false, - "deprecated": { - "since": "1.8.0", - "replaceWith": "users.createMFARecoveryCodes" - } - }, - { - "name": "createMFARecoveryCodes", - "namespace": "users", - "platforms": [ - "console", - "server" - ], - "summary": "", - "auth": { - "console": { - "Project": [] - }, - "server": { - "Project": [], - "Key": [] - } - }, - "parameters": [ - "userId" - ], - "required": [ - "userId" - ], - "responses": [ - { - "code": 201, - "model": "#\/components\/schemas\/mfaRecoveryCodes" - } - ], - "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md", - "public": true - } - ], - "auth": { - "console": { - "Project": [] - }, - "server": { - "Project": [], - "Key": [] - } - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ { - "name": "userId", - "description": "User ID.", + "name": "passkeyId", + "description": "Passkey ID.", "required": true, "schema": { "type": "string", - "example": "" + "example": "" }, "in": "path" } ] } }, - "\/users\/{userId}\/name": { - "patch": { - "summary": "Update name", - "operationId": "usersUpdateName", - "tags": [ - "users" - ], - "description": "Update the user name by its unique ID.", - "responses": { - "200": { - "description": "User", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/user" - } - } - } - } - }, - "deprecated": false, - "x-appwrite": { - "group": "users", - "demo": "users\/update-name.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "users.write", - "platforms": [ - "console", - "server" - ], - "packaging": false, - "public": true, - "auth": { - "console": { - "Project": [] - }, - "server": { - "Project": [], - "Key": [] - } - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "userId", - "description": "User ID.", - "required": true, - "schema": { - "type": "string", - "example": "" - }, - "in": "path" - } - ], - "requestBody": { - "content": { - "application\/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "description": "User name. Max length: 128 chars.", - "type": "string", - "example": "" - } - }, - "required": [ - "name" - ] - } - } - } - } - } - }, "\/users\/{userId}\/password": { "patch": { "summary": "Update password", @@ -125579,13 +127017,13 @@ "name": "embeddings", "description": "" }, - { - "name": "assistant", - "description": "" - }, { "name": "growth", "description": "The Growth service allows you to contact the Appwrite team and record self-hosted installations." + }, + { + "name": "admin", + "description": "" } ], "components": { @@ -126837,6 +128275,9 @@ }, { "$ref": "#\/components\/schemas\/policyDenyCorporateEmail" + }, + { + "$ref": "#\/components\/schemas\/policyPasskey" } ], "discriminator": { @@ -126857,7 +128298,8 @@ "deny-aliased-email": "#\/components\/schemas\/policyDenyAliasedEmail", "deny-disposable-email": "#\/components\/schemas\/policyDenyDisposableEmail", "deny-free-email": "#\/components\/schemas\/policyDenyFreeEmail", - "deny-corporate-email": "#\/components\/schemas\/policyDenyCorporateEmail" + "deny-corporate-email": "#\/components\/schemas\/policyDenyCorporateEmail", + "passkey": "#\/components\/schemas\/policyPasskey" } } }, @@ -139349,6 +140791,13 @@ "phone" ], "title": "phone" + }, + { + "type": "string", + "enum": [ + "passkey" + ], + "title": "passkey" } ] }, @@ -142789,6 +144238,44 @@ "custom": true } }, + "policyPasskey": { + "description": "Policy Passkey", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "Policy ID.", + "example": "password-dictionary" + }, + "rpId": { + "type": "string", + "description": "Relying party ID passkeys are bound to. Empty until configured.", + "example": "example.com" + }, + "origins": { + "type": "array", + "description": "Web origins allowed to register and sign in with passkeys.", + "items": { + "type": "string" + }, + "example": [ + "https:\/\/example.com" + ] + } + }, + "required": [ + "$id", + "rpId", + "origins" + ], + "example": { + "$id": "password-dictionary", + "rpId": "example.com", + "origins": [ + "https:\/\/example.com" + ] + } + }, "policyDenyAliasedEmail": { "description": "Policy Deny Aliased Email", "type": "object", @@ -144407,7 +145894,7 @@ "resourceUpdatedAt": "2020-10-15T06:38:00.000+00:00", "projectId": "5e5ea5c16897e", "schedule": "5 4 * * *", - "data": [], + "data": {}, "active": true, "region": "fra" } @@ -144610,11 +146097,6 @@ "description": "Defines if main domain is configured. If so, custom domains can be created.", "example": true }, - "_APP_ASSISTANT_ENABLED": { - "type": "boolean", - "description": "Defines if AI assistant is enabled.", - "example": true - }, "_APP_DOMAIN_SITES": { "type": "string", "description": "A comma separated list of domains to use for site URLs.", @@ -144711,7 +146193,6 @@ "_APP_VCS_PROVIDERS_WITH_REPOSITORY_CREATION", "_APP_VCS_PROVIDERS_WITH_PUBLIC_REPOSITORIES", "_APP_DOMAIN_ENABLED", - "_APP_ASSISTANT_ENABLED", "_APP_DOMAIN_SITES", "_APP_DOMAIN_FUNCTIONS", "_APP_OPTIONS_FORCE_HTTPS", @@ -144749,7 +146230,6 @@ "github" ], "_APP_DOMAIN_ENABLED": true, - "_APP_ASSISTANT_ENABLED": true, "_APP_DOMAIN_SITES": "sites.localhost,sites.example.com", "_APP_DOMAIN_FUNCTIONS": "functions.localhost", "_APP_OPTIONS_FORCE_HTTPS": "enabled", @@ -145010,6 +146490,185 @@ "code": "446372" } }, + "tokenSecret": { + "description": "Token Secret", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "Token ID.", + "example": "bb8ea5c16897e" + }, + "$createdAt": { + "type": "string", + "description": "Token creation date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "userId": { + "type": "string", + "description": "User ID.", + "example": "5e5ea5c168bb8" + }, + "secret": { + "type": "string", + "description": "Token secret key. Exchange it for a session with the create session endpoint.", + "example": "" + }, + "expire": { + "type": "string", + "description": "Token expiration date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "phrase": { + "type": "string", + "description": "Security phrase of a token. Empty if security phrase was not requested when creating a token. It includes randomly generated phrase which is also sent in the external resource such as email.", + "example": "Golden Fox" + } + }, + "required": [ + "$id", + "$createdAt", + "userId", + "secret", + "expire", + "phrase" + ], + "example": { + "$id": "bb8ea5c16897e", + "$createdAt": "2020-10-15T06:38:00.000+00:00", + "userId": "5e5ea5c168bb8", + "secret": "", + "expire": "2020-10-15T06:38:00.000+00:00", + "phrase": "Golden Fox" + } + }, + "passkey": { + "description": "Passkey", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "Passkey ID.", + "example": "5e5ea5c16897e" + }, + "$createdAt": { + "type": "string", + "description": "Passkey creation date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "$updatedAt": { + "type": "string", + "description": "Passkey update date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "name": { + "type": "string", + "description": "Passkey name.", + "example": "My laptop" + }, + "accessedAt": { + "type": "string", + "description": "Most recent sign-in with this passkey in ISO 8601 format. Empty until the passkey is used to sign in.", + "example": "2020-10-15T06:38:00.000+00:00" + } + }, + "required": [ + "$id", + "$createdAt", + "$updatedAt", + "name", + "accessedAt" + ], + "example": { + "$id": "5e5ea5c16897e", + "$createdAt": "2020-10-15T06:38:00.000+00:00", + "$updatedAt": "2020-10-15T06:38:00.000+00:00", + "name": "My laptop", + "accessedAt": "2020-10-15T06:38:00.000+00:00" + } + }, + "passkeyChallenge": { + "description": "Passkey Challenge", + "type": "object", + "properties": { + "$id": { + "type": "string", + "description": "Challenge ID. When signing in, pass it back with the credential to receive a token.", + "example": "bb8ea5c16897e" + }, + "$createdAt": { + "type": "string", + "description": "Challenge creation date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "passkeyId": { + "type": "string", + "description": "ID of the passkey being registered. Empty for sign-in challenges.", + "example": "5e5ea5c16897e" + }, + "expire": { + "type": "string", + "description": "Challenge expiration date in ISO 8601 format.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "publicKey": { + "type": "object", + "additionalProperties": true, + "description": "WebAuthn options in JSON form. Pass them to `PublicKeyCredential.parseCreationOptionsFromJSON()` when registering, or `PublicKeyCredential.parseRequestOptionsFromJSON()` when signing in.", + "example": { + "challenge": "PBN-3LnR1ZxSSpC0TgJsbUu92mcdgErmvtne916-yPs", + "rpId": "example.com", + "userVerification": "required" + } + } + }, + "required": [ + "$id", + "$createdAt", + "passkeyId", + "expire", + "publicKey" + ], + "example": { + "$id": "bb8ea5c16897e", + "$createdAt": "2020-10-15T06:38:00.000+00:00", + "passkeyId": "5e5ea5c16897e", + "expire": "2020-10-15T06:38:00.000+00:00", + "publicKey": { + "challenge": "PBN-3LnR1ZxSSpC0TgJsbUu92mcdgErmvtne916-yPs", + "rpId": "example.com", + "userVerification": "required" + } + } + }, + "passkeyList": { + "description": "Passkeys List", + "type": "object", + "properties": { + "total": { + "type": "integer", + "description": "Total number of passkeys that matched your query.", + "format": "int32", + "example": 5 + }, + "passkeys": { + "type": "array", + "description": "List of passkeys.", + "items": { + "$ref": "#\/components\/schemas\/passkey" + }, + "example": [] + } + }, + "required": [ + "total", + "passkeys" + ], + "example": { + "total": 5, + "passkeys": "" + } + }, "mfaRecoveryCodes": { "description": "MFA Recovery Codes", "type": "object", @@ -147322,11 +148981,6 @@ "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.", @@ -147347,10 +149001,15 @@ "https:\/\/example.com" ] }, - "snippetId": { + "accessedAt": { "type": "string", - "description": "Unique identifier for the tracking script snippet.", - "example": "snp_a1b2c3d4e5" + "description": "Most recent event date in ISO 8601 format. This attribute is only updated again after 24 hours.", + "example": "2020-10-15T06:38:00.000+00:00" + }, + "firstAccessedAt": { + "type": "string", + "description": "First event date in ISO 8601 format. Empty until the property receives its first event.", + "example": "2020-10-15T06:38:00.000+00:00" } }, "required": [ @@ -147359,11 +149018,11 @@ "$updatedAt", "name", "domain", - "timezone", "enabled", "public", "allowedOrigins", - "snippetId" + "accessedAt", + "firstAccessedAt" ], "example": { "$id": "5e5ea5c16897e", @@ -147371,13 +149030,13 @@ "$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" + "accessedAt": "2020-10-15T06:38:00.000+00:00", + "firstAccessedAt": "2020-10-15T06:38:00.000+00:00" } }, "aggregationTeam": { @@ -147972,7 +149631,8 @@ "addressLine2": { "type": "string", "description": "Address line 2", - "example": "" + "example": "", + "nullable": true }, "country": { "type": "string", @@ -147987,23 +149647,22 @@ "state": { "type": "string", "description": "state", - "example": "" + "example": "", + "nullable": true }, "postalCode": { "type": "string", "description": "postal code", - "example": "" + "example": "", + "nullable": true } }, "required": [ "$id", "userId", "streetAddress", - "addressLine2", "country", - "city", - "state", - "postalCode" + "city" ], "example": { "$id": "eu-fr", @@ -149157,7 +150816,8 @@ "type": "integer", "description": "Branch port. Null until the backing reports one.", "format": "int32", - "example": 5432 + "example": 5432, + "nullable": true }, "database": { "type": "string", @@ -149196,7 +150856,6 @@ "namespace", "expiresAt", "host", - "port", "database", "username", "password", @@ -149725,12 +151384,14 @@ "api": { "type": "string", "description": "Product API that owns this database: tablesdb, documentsdb, vectorsdb, mysql, postgresql, or mongodb.", - "example": "postgresql" + "example": "postgresql", + "nullable": true }, "engine": { "type": "string", "description": "Database engine: postgresql, mysql, or mongodb. Null until the backing reports one.", - "example": "postgresql" + "example": "postgresql", + "nullable": true }, "version": { "type": "string", @@ -149756,7 +151417,8 @@ "type": "integer", "description": "Database port for connections. Derived from the engine when the backing has not reported one yet.", "format": "int32", - "example": 5432 + "example": 5432, + "nullable": true }, "connectionUser": { "type": "string", @@ -149772,7 +151434,8 @@ "type": "integer", "description": "Committed generation of the primary connection credentials. Null until the rotation contract has been initialized.", "format": "int32", - "example": 1 + "example": 1, + "nullable": true }, "connectionString": { "type": "string", @@ -149996,16 +151659,12 @@ "$updatedAt", "projectId", "name", - "api", - "engine", "version", "specification", "backend", "hostname", - "connectionPort", "connectionUser", "connectionPassword", - "credentialGeneration", "connectionString", "ssl", "status", @@ -150216,7 +151875,8 @@ "sourceDatabaseId": { "type": "string", "description": "Source database ID when restoring a backup into another database.", - "example": "5e5ea5c16897e" + "example": "5e5ea5c16897e", + "nullable": true }, "projectId": { "type": "string", @@ -150226,7 +151886,8 @@ "backupId": { "type": "string", "description": "Backup ID used for restoration (null for PITR).", - "example": "5e5ea5c16897e" + "example": "5e5ea5c16897e", + "nullable": true }, "type": { "type": "string", @@ -150241,17 +151902,20 @@ "targetTime": { "type": "string", "description": "Target time for PITR restoration in ISO 8601 format.", - "example": "2020-10-15T06:38:00.000+00:00" + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "startedAt": { "type": "string", "description": "Restoration start time in ISO 8601 format.", - "example": "2020-10-15T06:38:00.000+00:00" + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "completedAt": { "type": "string", "description": "Restoration completion time in ISO 8601 format.", - "example": "2020-10-15T06:38:00.000+00:00" + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "error": { "type": "string", @@ -150263,14 +151927,9 @@ "$id", "$createdAt", "databaseId", - "sourceDatabaseId", "projectId", - "backupId", "type", "status", - "targetTime", - "startedAt", - "completedAt", "error" ], "example": { @@ -151152,7 +152811,8 @@ "type": "number", "description": "Discount amount", "format": "double", - "example": 50 + "example": 50, + "nullable": true }, "credits": { "type": "number", @@ -151192,7 +152852,6 @@ "required": [ "amount", "grossAmount", - "discount", "credits", "items", "discounts", @@ -151327,7 +152986,8 @@ "type": "number", "description": "Discount amount", "format": "double", - "example": 50 + "example": 50, + "nullable": true }, "credits": { "type": "number", @@ -151373,7 +153033,6 @@ "required": [ "amount", "grossAmount", - "discount", "credits", "items", "discounts", @@ -151849,7 +153508,8 @@ "clientSecret": { "type": "string", "description": "Client secret for processing failed payments in front-end", - "example": "pi_daslfasdfkla_asdkfl" + "example": "pi_daslfasdfkla_asdkfl", + "nullable": true }, "status": { "type": "string", @@ -151864,7 +153524,8 @@ "lastError": { "type": "string", "description": "Last payment error associated with the invoice", - "example": "Your card has insufficient balance." + "example": "Your card has insufficient balance.", + "nullable": true }, "dueAt": { "type": "string", @@ -151899,10 +153560,8 @@ "grossAmount", "creditsUsed", "currency", - "clientSecret", "status", "type", - "lastError", "dueAt", "from", "to" @@ -152088,7 +153747,8 @@ "type": "integer", "description": "Database port. Null until the backing reports one.", "format": "int32", - "example": 5432 + "example": 5432, + "nullable": true }, "engine": { "type": "string", @@ -152181,7 +153841,6 @@ "databaseInternalId", "database", "hostname", - "port", "engine", "status", "containerStatus", @@ -152705,17 +154364,20 @@ "billingStartDate": { "type": "string", "description": "Billing cycle start date.", - "example": "2020-10-15T06:38:00.000+00:00" + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "billingCurrentInvoiceDate": { "type": "string", "description": "Current invoice cycle start date.", - "example": "2020-10-15T06:38:00.000+00:00" + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "billingNextInvoiceDate": { "type": "string", "description": "Next invoice cycle start date.", - "example": "2020-10-15T06:38:00.000+00:00" + "example": "2020-10-15T06:38:00.000+00:00", + "nullable": true }, "billingTrialStartDate": { "type": "string", @@ -152727,22 +154389,26 @@ "type": "integer", "description": "Number of trial days.", "format": "int32", - "example": 14 + "example": 14, + "nullable": true }, "billingAggregationId": { "type": "string", "description": "Current active aggregation id.", - "example": "adbc3de4rddfsd" + "example": "adbc3de4rddfsd", + "nullable": true }, "billingInvoiceId": { "type": "string", "description": "Current active aggregation id.", - "example": "adbc3de4rddfsd" + "example": "adbc3de4rddfsd", + "nullable": true }, "paymentMethodId": { "type": "string", "description": "Default payment method.", - "example": "adbc3de4rddfsd" + "example": "adbc3de4rddfsd", + "nullable": true }, "billingAddressId": { "type": "string", @@ -152849,13 +154515,6 @@ "billingPlanId", "billingPlanDetails", "billingEmail", - "billingStartDate", - "billingCurrentInvoiceDate", - "billingNextInvoiceDate", - "billingTrialDays", - "billingAggregationId", - "billingInvoiceId", - "paymentMethodId", "status", "markedForDeletion", "platform", @@ -153010,48 +154669,57 @@ "type": "integer", "description": "Expiry month of the payment method.", "format": "int32", - "example": 2 + "example": 2, + "nullable": true }, "expiryYear": { "type": "integer", "description": "Expiry year of the payment method.", "format": "int32", - "example": 2024 + "example": 2024, + "nullable": true }, "last4": { "type": "string", "description": "Last 4 digit of the payment method", - "example": "4242" + "example": "4242", + "nullable": true }, "brand": { "type": "string", "description": "Payment method brand", - "example": "visa" + "example": "visa", + "nullable": true }, "name": { "type": "string", "description": "Name of the owner", - "example": "John Doe" + "example": "John Doe", + "nullable": true }, "mandateId": { "type": "string", "description": "Mandate ID of the payment method", - "example": "yxc" + "example": "yxc", + "nullable": true }, "country": { "type": "string", "description": "Country of the payment method", - "example": "de" + "example": "de", + "nullable": true }, "state": { "type": "string", "description": "State of the payment method", - "example": "" + "example": "", + "nullable": true }, "lastError": { "type": "string", "description": "Last payment error associated with the payment method.", - "example": "Your card has insufficient funds." + "example": "Your card has insufficient funds.", + "nullable": true }, "default": { "type": "boolean", @@ -153078,15 +154746,6 @@ "clientSecret", "providerUserId", "userId", - "expiryMonth", - "expiryYear", - "last4", - "brand", - "name", - "mandateId", - "country", - "state", - "lastError", "default", "expired", "failed" @@ -154652,7 +156311,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "executions": { "type": "object", @@ -154661,7 +156321,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "member": { "type": "object", @@ -154680,7 +156341,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "realtimeMessages": { "type": "object", @@ -154689,7 +156351,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "realtimeBandwidth": { "type": "object", @@ -154708,7 +156371,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "users": { "type": "object", @@ -154717,7 +156381,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "GBHours": { "type": "object", @@ -154726,7 +156391,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "imageTransformations": { "type": "object", @@ -154735,7 +156401,8 @@ { "$ref": "#\/components\/schemas\/additionalResource" } - ] + ], + "nullable": true }, "credits": { "type": "object", @@ -154748,16 +156415,6 @@ "nullable": true } }, - "required": [ - "bandwidth", - "executions", - "realtime", - "realtimeMessages", - "storage", - "users", - "GBHours", - "imageTransformations" - ], "example": { "bandwidth": null, "executions": null,