{ "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."] } } } } } }