mirror of
https://github.com/better-auth/better-auth.git
synced 2026-05-23 07:18:56 -05:00
1968 lines
38 KiB
JSON
1968 lines
38 KiB
JSON
{
|
||
"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."]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|