{
	"openapi": "3.1.1",
	"info": {
		"title": "Better Auth API",
		"description": "The Better Auth API Endpoints gets documented here.\n\n## Resources\n\n* https://github.com/better-auth/better-auth\n* https://better-auth.com\n",
		"version": "1.0.0",
		"contact": {
			"url": "https://better-auth.com"
		}
	},
	"servers": [
		{
			"url": "{protocol}://{baseURL}/{path}",
			"description": "Responds with your request data",
			"variables": {
				"baseURL": {
					"default": "localhost:3000"
				},
				"protocol": {
					"enum": ["https"],
					"default": "https"
				},
				"path": {
					"default": ""
				}
			}
		}
	],
	"security": [
		{
			"bearerAuth": []
		},
		{
			"apiKeyCookie": []
		}
	],
	"tags": [
		{
			"name": "Sessions",
			"description": "Everything about sessions"
		},
		{
			"name": "Account",
			"description": "Everything about account"
		},
		{
			"name": "Callback",
			"description": "Everything about callback"
		},
		{
			"name": "Email Verification",
			"description": "Everything about email verification"
		},
		{
			"name": "Forget Password",
			"description": "Everything about forget password"
		},
		{
			"name": "Sign in",
			"description": "Everything about sign in"
		},
		{
			"name": "Sign out",
			"description": "Everything about sign out"
		},
		{
			"name": "Sign up",
			"description": "Everything about sign up"
		},
		{
			"name": "Update user",
			"description": "Everything about update user"
		}
	],
	"paths": {
		"/get-session": {
			"get": {
				"tags": ["Sessions"],
				"summary": "Get current session",
				"descriptions": "It's used to get the currently logged in session.",
				"operationId": "getSession",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Session"
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					}
				}
			}
		},
		"/list-sessions": {
			"get": {
				"tags": ["Sessions"],
				"summary": "List all sessions",
				"descriptions": "It's used to list all the sessions.",
				"operationId": "listSessions",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"$ref": "#/components/schemas/Session"
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					}
				}
			}
		},
		"/revoke-session": {
			"post": {
				"tags": ["Sessions"],
				"summary": "Revoke a session",
				"descriptions": "It's used to revoke a session.",
				"operationId": "revokeSession",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"description": "Session ID",
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"id": {
										"type": "string"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					}
				}
			}
		},
		"/revoke-sessions": {
			"post": {
				"tags": ["Sessions"],
				"summary": "Revoke all sessions",
				"descriptions": "It's used to revoke all sessions.",
				"operationId": "revokeSessions",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					}
				}
			}
		},
		"/revoke-other-sessions": {
			"post": {
				"tags": ["Sessions"],
				"summary": "Revoke other sessions",
				"descriptions": "It's used to revoke all other sessions, other than the current one.",
				"operationId": "revokeOtherSessions",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					}
				}
			}
		},
		"/list-accounts": {
			"get": {
				"tags": ["Account"],
				"summary": "List all accounts",
				"descriptions": "It's used to list all the accounts linked to the current user.",
				"operationId": "listAccounts",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"$ref": "#/components/schemas/Account"
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					}
				}
			}
		},
		"/link-social": {
			"post": {
				"tags": ["Account"],
				"summary": "Link social account",
				"descriptions": "It's used to link social account to the current user.",
				"operationId": "linkSocial",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "currentURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"]
						}
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"provider": {
										"type": "string",
										"examples": [
											"google",
											"facebook",
											"github",
											"gitlab",
											"twitter",
											"linkedin",
											"microsoft"
										],
										"default": "google"
									},
									"callbackURL": {
										"type": "string",
										"format": "url",
										"required": false,
										"examples": ["https://better-auth.com"],
										"default": "http://localhost:3000"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"url": {
											"type": "string",
											"format": "url"
										},
										"redirect": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Social Account is already linked."]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/responses/Unauthorized"
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Provider not found"]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/callback/:id": {
			"get": {
				"tags": ["Callback"],
				"summary": "Callback",
				"descriptions": "It's used to callback the social account.",
				"operationId": "callback",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "state",
						"in": "query",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "code",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "error",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"302": {
						"description": "Redirect on error or success"
					}
				}
			}
		},
		"/send-verification-email": {
			"post": {
				"tags": ["Email Verification"],
				"summary": "Send verification email",
				"descriptions": "It's used to send verification email.",
				"operationId": "sendVerificationEmail",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "currentURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"]
						}
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"email": {
										"type": "string",
										"format": "email",
										"examples": ["bekacru@better-auth.com"]
									},
									"callbackURL": {
										"type": "string",
										"format": "url",
										"required": false,
										"examples": ["https://better-auth.com"],
										"default": "http://localhost:3000"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Verification email isn't enabled",
												"User not found"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/verify-email": {
			"get": {
				"tags": ["Email Verification"],
				"summary": "Verify email",
				"descriptions": "It's used to verify email.",
				"operationId": "verifyEmail",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "token",
						"in": "query",
						"required": true,
						"schema": {
							"type": "string",
							"format": "uuid"
						}
					},
					{
						"name": "callbackURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"],
							"default": "http://localhost:3000"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"user": {
											"$ref": "#/components/schemas/User",
											"nullable": true
										},
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"302": {
						"description": "Redirect"
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Invalid token", "User not found"]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Session not found", "Invalid session"]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/forget-password": {
			"post": {
				"tags": ["Forget Password"],
				"summary": "Forget password",
				"descriptions": "It's used to forget password.",
				"operationId": "forgetPassword",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"email": {
										"type": "string",
										"format": "email",
										"examples": ["bekacru@better-auth.com"]
									},
									"redirctTo": {
										"type": "string",
										"format": "url",
										"required": false,
										"examples": ["https://better-auth.com"],
										"default": "http://localhost:3000"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Reset password isn't enabled"]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/reset-password/:token": {
			"get": {
				"tags": ["Forget Password"],
				"summary": "Reset password with token",
				"descriptions": "It's used to reset password with a token.",
				"operationId": "resetPasswordToken",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "token",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string",
							"format": "uuid"
						}
					},
					{
						"name": "callbackURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"],
							"default": "http://localhost:3000"
						}
					}
				],
				"responses": {
					"302": {
						"description": "Redirect"
					}
				}
			}
		},
		"/reset-password": {
			"post": {
				"tags": ["Forget Password"],
				"summary": "Reset password",
				"descriptions": "It's used to reset/set a new password.",
				"operationId": "resetPassword",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "token",
						"in": "query",
						"required": true,
						"schema": {
							"type": "string",
							"format": "uuid"
						}
					},
					{
						"name": "callbackURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"]
						}
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"newPassword": {
										"type": "string",
										"examples": ["i-love-better-auth", "better-auth-is-cool"]
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Token not found",
												"Invalid token",
												"Failed to update password"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/sign-in/social": {
			"post": {
				"tags": ["Sign in"],
				"summary": "Sign in with social account",
				"descriptions": "It's used to sign in with social account.",
				"operationId": "signInSocial",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "currentURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"]
						}
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"provider": {
										"type": "string",
										"examples": [
											"google",
											"facebook",
											"github",
											"gitlab",
											"twitter",
											"linkedin",
											"microsoft"
										],
										"default": "google"
									},
									"callbackURL": {
										"type": "string",
										"format": "url",
										"required": false,
										"examples": ["https://better-auth.com"],
										"default": "http://localhost:3000"
									},
									"idToken": {
										"required": false,
										"type": "object",
										"properties": {
											"token": {
												"type": "string"
											},
											"nonce": {
												"type": "string",
												"required": false
											},
											"accessToken": {
												"type": "string",
												"required": false
											},
											"refreshToken": {
												"type": "string",
												"required": false
											},
											"expiresAt": {
												"type": "integer",
												"format": "int64",
												"required": false
											}
										}
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"user": {
											"$ref": "#/components/schemas/User",
											"nullable": true
										},
										"session": {
											"$ref": "#/components/schemas/Session",
											"nullable": true
										},
										"url": {
											"type": "string",
											"format": "url"
										},
										"redirect": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Invalid id token",
												"Failed to get user info",
												"User email not found"
											]
										}
									}
								}
							}
						}
					},
					"404": {
						"description": "Not Found",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Provider not found",
												"Provider does not support id token verification"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/sign-in/email": {
			"post": {
				"tags": ["Sign in"],
				"summary": "Sign in with email",
				"descriptions": "It's used to sign in with email.",
				"operationId": "signInEmail",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"email": {
										"type": "string",
										"format": "email",
										"examples": ["bekacru@better-auth.com"]
									},
									"password": {
										"type": "string",
										"examples": ["i-love-better-auth"]
									},
									"callbackURL": {
										"type": "string",
										"format": "url",
										"required": false
									},
									"dontRememberMe": {
										"type": "boolean",
										"examples": [true]
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"user": {
											"$ref": "#/components/schemas/User",
											"nullable": true
										},
										"session": {
											"$ref": "#/components/schemas/Session",
											"nullable": true
										},
										"url": {
											"type": "string",
											"format": "url"
										},
										"redirect": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Invalid email"]
										}
									}
								}
							}
						}
					},
					"401": {
						"description": "Unauthorized",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Email and password is not enabled",
												"Invalid email or password",
												"Unexpected error",
												"Failed to create session"
											]
										}
									}
								}
							}
						}
					},
					"403": {
						"description": "Forbidden",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Email is not verified. Check your email for a verification link"
											]
										}
									}
								}
							}
						}
					},
					"500": {
						"description": "Internal Server Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Email is not verified."]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/sign-out": {
			"post": {
				"tags": ["Sign out"],
				"summary": "Sign out",
				"descriptions": "It's used to sign out.",
				"operationId": "signOut",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Session not found"]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/sign-up/email": {
			"post": {
				"tags": ["Sign up"],
				"summary": "Sign up with email",
				"descriptions": "It's used to sign up with email.",
				"operationId": "signUpEmail",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "currentURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"]
						}
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"name": {
										"type": "string",
										"examples": ["Bekacru"]
									},
									"email": {
										"type": "string",
										"format": "email",
										"examples": ["bekacru@better-auth.com"]
									},
									"password": {
										"type": "string",
										"examples": ["i-love-better-auth"]
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"user": {
											"$ref": "#/components/schemas/User"
										},
										"session": {
											"$ref": "#/components/schemas/Session",
											"nullable": true
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Email and password sign up is not enabled",
												"Invalid email",
												"Password is too short",
												"Password is too long",
												"Failed to create user",
												"Failed to create session"
											]
										}
									}
								}
							}
						}
					},
					"422": {
						"description": "Unprocessable Entity",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"User with this email already exists",
												"Failed to create user"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/update-user": {
			"post": {
				"tags": ["Update user"],
				"summary": "Update user",
				"descriptions": "It's used to update user.",
				"operationId": "updateUser",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"name": {
										"required": false,
										"type": "string",
										"examples": ["Bekacru"]
									},
									"image": {
										"required": false,
										"type": "string",
										"format": "url"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"user": {
											"$ref": "#/components/schemas/User"
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["You can't update email"]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/change-password": {
			"post": {
				"tags": ["Update user"],
				"summary": "Change password",
				"descriptions": "It's used to change password.",
				"operationId": "changePassword",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"currentPassword": {
										"type": "string",
										"examples": ["i-like-better-auth"]
									},
									"newPassword": {
										"type": "string",
										"examples": ["i-love-better-auth"]
									},
									"revokeOtherSessions": {
										"type": "boolean",
										"examples": [true]
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Password is too short",
												"Password too long",
												"User does not have a password",
												"Incorrect password"
											]
										}
									}
								}
							}
						}
					},
					"500": {
						"description": "Internal Server Error",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": ["Unable to create session"]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/set-password": {
			"post": {
				"tags": ["Update user"],
				"summary": "Set password",
				"descriptions": "It's used to set password.",
				"operationId": "setPassword",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"newPassword": {
										"type": "string",
										"examples": ["i-love-better-auth"]
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Password is too short",
												"Password too long",
												"user already has a password"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/delete-user": {
			"post": {
				"tags": ["Update user"],
				"summary": "Delete user",
				"descriptions": "It's used to delete user.",
				"operationId": "deleteUser",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"password": {
										"type": "string",
										"examples": ["i-love-better-auth"]
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "integer",
									"nullable": true
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"User does not have a password",
												"Incorrect password"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		},
		"/change-email": {
			"post": {
				"tags": ["Update user"],
				"summary": "Change email",
				"descriptions": "It's used to change email.",
				"operationId": "changeEmail",
				"security": [
					{
						"bearerAuth": []
					},
					{
						"apiKeyCookie": []
					}
				],
				"parameters": [
					{
						"name": "currentURL",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"format": "url",
							"examples": ["https://better-auth.com"]
						}
					}
				],
				"requestBody": {
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"properties": {
									"newEmail": {
										"type": "string",
										"format": "email",
										"examples": ["bekacru@better-auth.com"]
									},
									"callbackURL": {
										"type": "string",
										"format": "url",
										"required": false,
										"examples": ["https://better-auth.com"],
										"default": "http://localhost:3000"
									}
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"user": {
											"$ref": "#/components/schemas/User",
											"nullable": true
										},
										"status": {
											"type": "boolean",
											"examples": [true]
										}
									}
								}
							}
						}
					},
					"400": {
						"description": "Bad Request",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"message": {
											"type": "string",
											"examples": [
												"Change email is disabled",
												"Email is the same",
												"Couldn't update your email",
												"Verification email isn't enabled"
											]
										}
									}
								}
							}
						}
					}
				}
			}
		}
	},
	"components": {
		"securitySchemes": {
			"bearerAuth": {
				"type": "http",
				"scheme": "bearer",
				"description": "JWT Bearer token authentication"
			},
			"apiKeyCookie": {
				"type": "apiKey",
				"in": "cookie",
				"name": "api_key",
				"description": "API key browser cookie"
			}
		},
		"responses": {
			"BadRequest": {
				"description": "Bad Request",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"Forbidden": {
				"description": "Forbidden",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"NotFound": {
				"description": "NotFound",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			},
			"Unauthorized": {
				"description": "Unauthorized",
				"content": {
					"application/json": {
						"schema": {
							"$ref": "#/components/schemas/Error"
						}
					}
				}
			}
		},
		"schemas": {
			"Session": {
				"type": "object",
				"properties": {
					"session": {
						"type": "object",
						"properties": {
							"id": {
								"type": "string"
							},
							"expiresAt": {
								"type": "string",
								"format": "date-time"
							},
							"ipAddress": {
								"type": "string",
								"format": "ipv4",
								"example": "127.0.0.1"
							},
							"userAgent": {
								"type": "string"
							},
							"userId": {
								"type": "string",
								"format": "uuid"
							}
						}
					},
					"user": {
						"type": "object",
						"properties": {
							"id": {
								"type": "string"
							},
							"name": {
								"type": "string"
							},
							"email": {
								"type": "string",
								"format": "email"
							},
							"emailVerified": {
								"type": "boolean"
							},
							"image": {
								"type": "string",
								"format": "url"
							},
							"createdAt": {
								"type": "string",
								"format": "date-time"
							},
							"updatedAt": {
								"type": "string",
								"format": "date-time"
							}
						}
					}
				}
			},
			"Account": {
				"type": "object",
				"properties": {
					"id": {
						"type": "string"
					},
					"accountId": {
						"type": "string"
					},
					"providerId": {
						"type": "string",
						"examples": [
							"google",
							"facebook",
							"github",
							"gitlab",
							"twitter",
							"linkedin",
							"microsoft"
						]
					},
					"userId": {
						"type": "string"
					},
					"accessToken": {
						"type": "string"
					},
					"refreshToken": {
						"type": "string"
					},
					"idToken": {
						"type": "string"
					},
					"expiresAt": {
						"type": "string",
						"format": "date-time"
					},
					"password": {
						"type": "string"
					}
				}
			},
			"User": {
				"type": "object",
				"properties": {
					"id": {
						"type": "string"
					},
					"name": {
						"type": "string"
					},
					"email": {
						"type": "string",
						"format": "email"
					},
					"emailVerified": {
						"type": "boolean"
					},
					"image": {
						"type": "string",
						"format": "url"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time"
					}
				}
			},
			"Error": {
				"type": "object",
				"description": "RFC 7807 (https://datatracker.ietf.org/doc/html/rfc7807)",
				"properties": {
					"type": {
						"type": "string",
						"examples": ["https://example.com/errors/generic-error"]
					},
					"title": {
						"type": "string",
						"examples": ["Something went wrong here."]
					},
					"status": {
						"type": "integer",
						"format": "int64",
						"examples": [403]
					},
					"detail": {
						"type": "string",
						"examples": ["Unfortunately, we can’t provide further information."]
					}
				}
			}
		}
	}
}
