- Fix integration data cache: check pending promise before TTL to prevent returning undefined on concurrent cold-cache access - Add concurrent-miss test (two parallel callers, one fetch) - SVG sanitizer: extract <svg> from DOMPurify output to strip residual HTML wrapper - Narrow safeRevalidateTag catch: log unexpected errors, silence only known "outside request scope" messages - Run oxfmt across all packages (206 files formatted)
2266 lines
88 KiB
JSON
2266 lines
88 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": { "title": "Homarr API documentation", "version": "1.1.0" },
|
|
"servers": [{ "url": "http://localhost:3000" }],
|
|
"externalDocs": { "url": "https://homarr.dev" },
|
|
"paths": {
|
|
"/api/apps/paginated": {
|
|
"get": {
|
|
"operationId": "appRouter-getPaginated",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [
|
|
{ "in": "query", "name": "search", "schema": { "type": "string" } },
|
|
{
|
|
"in": "query",
|
|
"name": "pageSize",
|
|
"schema": { "default": 10, "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }
|
|
},
|
|
{
|
|
"in": "query",
|
|
"name": "page",
|
|
"schema": { "default": 1, "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"description": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string" },
|
|
"href": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"pingUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "description", "iconUrl", "href", "pingUrl"],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"totalCount": { "type": "number" }
|
|
},
|
|
"required": ["items", "totalCount"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/apps": {
|
|
"get": {
|
|
"operationId": "appRouter-all",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"description": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string" },
|
|
"href": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"pingUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "description", "iconUrl", "href", "pingUrl"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"operationId": "appRouter-create",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1, "maxLength": 64 },
|
|
"description": { "anyOf": [{ "type": "string", "maxLength": 512 }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string", "minLength": 1 },
|
|
"href": {
|
|
"anyOf": [
|
|
{
|
|
"anyOf": [
|
|
{ "type": "string", "pattern": "^(?!javascript)[a-zA-Z]*:\\/\\/" },
|
|
{ "type": "string", "const": "" }
|
|
]
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
},
|
|
"pingUrl": {
|
|
"anyOf": [
|
|
{
|
|
"anyOf": [
|
|
{ "type": "string", "pattern": "^https?:\\/\\/" },
|
|
{ "type": "string", "const": "" }
|
|
]
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
}
|
|
},
|
|
"required": ["name", "description", "iconUrl", "href", "pingUrl"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"allOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": { "appId": { "type": "string" } },
|
|
"required": ["appId"],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"description": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string" },
|
|
"href": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"pingUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "description", "iconUrl", "href", "pingUrl"],
|
|
"additionalProperties": false
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/apps/search": {
|
|
"get": {
|
|
"operationId": "appRouter-search",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [
|
|
{ "in": "query", "name": "query", "schema": { "type": "string" }, "required": true },
|
|
{
|
|
"in": "query",
|
|
"name": "limit",
|
|
"schema": { "default": 10, "type": "number", "minimum": 1, "maximum": 100 }
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"description": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string" },
|
|
"href": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"pingUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "description", "iconUrl", "href", "pingUrl"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/apps/selectable": {
|
|
"get": {
|
|
"operationId": "appRouter-selectable",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"iconUrl": { "type": "string" },
|
|
"href": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"pingUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"description": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "iconUrl", "href", "pingUrl", "description"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/apps/{id}": {
|
|
"get": {
|
|
"operationId": "appRouter-byId",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"description": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string" },
|
|
"href": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"pingUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "description", "iconUrl", "href", "pingUrl"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"operationId": "appRouter-update",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1, "maxLength": 64 },
|
|
"description": { "anyOf": [{ "type": "string", "maxLength": 512 }, { "type": "null" }] },
|
|
"iconUrl": { "type": "string", "minLength": 1 },
|
|
"href": {
|
|
"anyOf": [
|
|
{
|
|
"anyOf": [
|
|
{ "type": "string", "pattern": "^(?!javascript)[a-zA-Z]*:\\/\\/" },
|
|
{ "type": "string", "const": "" }
|
|
]
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
},
|
|
"pingUrl": {
|
|
"anyOf": [
|
|
{
|
|
"anyOf": [
|
|
{ "type": "string", "pattern": "^https?:\\/\\/" },
|
|
{ "type": "string", "const": "" }
|
|
]
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
}
|
|
},
|
|
"required": ["name", "description", "iconUrl", "href", "pingUrl"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"operationId": "appRouter-delete",
|
|
"tags": ["apps"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards": {
|
|
"get": {
|
|
"operationId": "boardRouter-getAllBoards",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"logoImageUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"isPublic": { "type": "boolean" },
|
|
"creator": {
|
|
"anyOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"image": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"email": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "image", "email"],
|
|
"additionalProperties": false
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
},
|
|
"isHome": { "type": "boolean" },
|
|
"isMobileHome": { "type": "boolean" },
|
|
"userPermissions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "permission": { "type": "string", "enum": ["view", "modify", "full"] } },
|
|
"required": ["permission"],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"groupPermissions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "permission": { "type": "string", "enum": ["view", "modify", "full"] } },
|
|
"required": ["permission"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"logoImageUrl",
|
|
"isPublic",
|
|
"creator",
|
|
"isHome",
|
|
"isMobileHome",
|
|
"userPermissions",
|
|
"groupPermissions"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"operationId": "boardRouter-createBoard",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1, "maxLength": 255, "pattern": "^[A-Za-z0-9-_]*$" },
|
|
"columnCount": { "type": "number", "minimum": 1, "maximum": 24 },
|
|
"isPublic": { "type": "boolean" }
|
|
},
|
|
"required": ["name", "columnCount", "isPublic"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "boardId": { "type": "string" } },
|
|
"required": ["boardId"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}/duplicate": {
|
|
"post": {
|
|
"operationId": "boardRouter-duplicateBoard",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1, "maxLength": 255, "pattern": "^[A-Za-z0-9-_]*$" }
|
|
},
|
|
"required": ["name"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "boardId": { "type": "string" } },
|
|
"required": ["boardId"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}/name": {
|
|
"patch": {
|
|
"operationId": "boardRouter-renameBoard",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1, "maxLength": 255, "pattern": "^[A-Za-z0-9-_]*$" }
|
|
},
|
|
"required": ["name"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}/visibility": {
|
|
"patch": {
|
|
"operationId": "boardRouter-changeBoardVisibility",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "visibility": { "type": "string", "enum": ["public", "private"] } },
|
|
"required": ["visibility"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}": {
|
|
"delete": {
|
|
"operationId": "boardRouter-deleteBoard",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}/home": {
|
|
"patch": {
|
|
"operationId": "boardRouter-setHomeBoard",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}/mobile-home": {
|
|
"patch": {
|
|
"operationId": "boardRouter-setMobileHomeBoard",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/{id}/settings": {
|
|
"patch": {
|
|
"operationId": "boardRouter-savePartialBoardSettings",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"pageTitle": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"metaTitle": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"logoImageUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"faviconImageUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"backgroundImageUrl": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"backgroundImageAttachment": { "type": "string", "enum": ["fixed", "scroll"] },
|
|
"backgroundImageRepeat": {
|
|
"type": "string",
|
|
"enum": ["repeat", "repeat-x", "repeat-y", "no-repeat"]
|
|
},
|
|
"backgroundImageSize": { "type": "string", "enum": ["cover", "contain"] },
|
|
"primaryColor": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" },
|
|
"secondaryColor": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" },
|
|
"opacity": { "type": "number", "minimum": 0, "maximum": 100 },
|
|
"customCss": { "type": "string", "maxLength": 16384 },
|
|
"iconColor": {
|
|
"anyOf": [
|
|
{
|
|
"anyOf": [
|
|
{ "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" },
|
|
{ "type": "string", "const": "" }
|
|
]
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
},
|
|
"itemRadius": {
|
|
"anyOf": [
|
|
{ "type": "string", "const": "xs" },
|
|
{ "type": "string", "const": "sm" },
|
|
{ "type": "string", "const": "md" },
|
|
{ "type": "string", "const": "lg" },
|
|
{ "type": "string", "const": "xl" }
|
|
]
|
|
},
|
|
"disableStatus": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/boards/items": {
|
|
"post": {
|
|
"operationId": "boardRouter-addItem",
|
|
"tags": ["boards"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"boardId": { "type": "string" },
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"clock",
|
|
"weather",
|
|
"app",
|
|
"iframe",
|
|
"video",
|
|
"notebook",
|
|
"anchorNote",
|
|
"dnsHoleSummary",
|
|
"dnsHoleControls",
|
|
"smartHome-entityState",
|
|
"smartHome-executeAutomation",
|
|
"stockPrice",
|
|
"mediaServer",
|
|
"calendar",
|
|
"downloads",
|
|
"mediaRequests-requestList",
|
|
"mediaRequests-requestStats",
|
|
"mediaTranscoding",
|
|
"minecraftServerStatus",
|
|
"networkControllerSummary",
|
|
"networkControllerStatus",
|
|
"rssFeed",
|
|
"bookmarks",
|
|
"indexerManager",
|
|
"healthMonitoring",
|
|
"releases",
|
|
"mediaReleases",
|
|
"dockerContainers",
|
|
"firewall",
|
|
"notifications",
|
|
"systemResources",
|
|
"coolify",
|
|
"systemDisks",
|
|
"timetable",
|
|
"immich-serverStats",
|
|
"immich-albumCarousel",
|
|
"paperlessNgx",
|
|
"tracearr",
|
|
"speedtestTracker",
|
|
"uptimeKuma",
|
|
"audioStats",
|
|
"umami",
|
|
"vpn",
|
|
"archiveTeamWarrior",
|
|
"ups",
|
|
"beszelSystemTable",
|
|
"beszelSystemGrid",
|
|
"beszelAlerts",
|
|
"beszelSystemStats",
|
|
"customApi"
|
|
]
|
|
},
|
|
"options": {
|
|
"default": {},
|
|
"type": "object",
|
|
"propertyNames": { "type": "string" },
|
|
"additionalProperties": {}
|
|
},
|
|
"integrationIds": { "default": [], "type": "array", "items": { "type": "string" } }
|
|
},
|
|
"required": ["boardId", "kind"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "itemId": { "type": "string" } },
|
|
"required": ["itemId"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/info": {
|
|
"get": {
|
|
"operationId": "infoRouter-getInfo",
|
|
"tags": ["info"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "version": { "type": "string" } },
|
|
"required": ["version"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/invites": {
|
|
"get": {
|
|
"operationId": "inviteRouter-getAll",
|
|
"tags": ["invites"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"expirationDate": { "type": "string" },
|
|
"creator": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"id": { "type": "string" }
|
|
},
|
|
"required": ["name", "id"],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": ["id", "expirationDate", "creator"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"operationId": "inviteRouter-createInvite",
|
|
"tags": ["invites"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "expirationDate": { "type": "string" } },
|
|
"required": ["expirationDate"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "id": { "type": "string" }, "token": { "type": "string" } },
|
|
"required": ["id", "token"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/invites/{id}": {
|
|
"delete": {
|
|
"operationId": "inviteRouter-deleteInvite",
|
|
"tags": ["invites"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "id", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": { "application/json": { "schema": { "not": {} } } }
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/board": {
|
|
"get": {
|
|
"operationId": "serverSettingsRouter-getBoardSettings",
|
|
"tags": ["settings"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"homeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"mobileHomeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"enableStatusByDefault": { "type": "boolean" },
|
|
"forceDisableStatus": { "type": "boolean" }
|
|
},
|
|
"required": ["homeBoardId", "mobileHomeBoardId", "enableStatusByDefault", "forceDisableStatus"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"operationId": "serverSettingsRouter-updateBoardSettings",
|
|
"tags": ["settings"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"homeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"mobileHomeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"enableStatusByDefault": { "type": "boolean" },
|
|
"forceDisableStatus": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"homeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"mobileHomeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"enableStatusByDefault": { "type": "boolean" },
|
|
"forceDisableStatus": { "type": "boolean" }
|
|
},
|
|
"required": ["homeBoardId", "mobileHomeBoardId", "enableStatusByDefault", "forceDisableStatus"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users": {
|
|
"post": {
|
|
"operationId": "userRouter-create",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"username": { "type": "string", "minLength": 3, "maxLength": 255 },
|
|
"password": { "type": "string", "minLength": 8, "maxLength": 255 },
|
|
"confirmPassword": { "type": "string" },
|
|
"email": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "email",
|
|
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
|
|
},
|
|
{ "type": "string", "minLength": 0, "maxLength": 0 }
|
|
]
|
|
},
|
|
"groupIds": { "type": "array", "items": { "type": "string" } }
|
|
},
|
|
"required": ["username", "password", "confirmPassword", "groupIds"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"operationId": "userRouter-getAll",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"emailVerified": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"image": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "email", "emailVerified", "image"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/profileImage": {
|
|
"put": {
|
|
"operationId": "userRouter-setProfileImage",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"userId": { "type": "string" },
|
|
"image": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 350000,
|
|
"pattern": "^data:image\\/(png|jpeg|gif|webp);base64,[A-Za-z0-9/+]+=*$"
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
}
|
|
},
|
|
"required": ["userId", "image"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/selectable": {
|
|
"get": {
|
|
"operationId": "userRouter-selectable",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [
|
|
{
|
|
"in": "query",
|
|
"name": "providers",
|
|
"schema": { "type": "array", "items": { "type": "string", "enum": ["credentials", "oidc", "ldap"] } }
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"image": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"email": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "image", "email"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/search": {
|
|
"post": {
|
|
"operationId": "userRouter-search",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": { "type": "string" },
|
|
"limit": { "default": 10, "type": "number", "minimum": 1, "maximum": 100 }
|
|
},
|
|
"required": ["query"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"image": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"email": { "anyOf": [{ "type": "string" }, { "type": "null" }] }
|
|
},
|
|
"required": ["id", "name", "image", "email"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/{userId}": {
|
|
"get": {
|
|
"operationId": "userRouter-getById",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "userId", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"emailVerified": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"image": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"provider": { "type": "string" },
|
|
"homeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"mobileHomeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"firstDayOfWeek": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 },
|
|
"pingIconsEnabled": { "type": "boolean" },
|
|
"defaultSearchEngineId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"openSearchInNewTab": { "type": "boolean" },
|
|
"ddgBangs": { "type": "boolean" },
|
|
"completedManageTour": { "type": "boolean" },
|
|
"completedBoardTour": { "type": "boolean" }
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"email",
|
|
"emailVerified",
|
|
"image",
|
|
"provider",
|
|
"homeBoardId",
|
|
"mobileHomeBoardId",
|
|
"firstDayOfWeek",
|
|
"pingIconsEnabled",
|
|
"defaultSearchEngineId",
|
|
"openSearchInNewTab",
|
|
"ddgBangs",
|
|
"completedManageTour",
|
|
"completedBoardTour"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"operationId": "userRouter-delete",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "userId", "schema": { "type": "string" }, "required": true }],
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/profile": {
|
|
"put": {
|
|
"operationId": "userRouter-editProfile",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string", "minLength": 3, "maxLength": 255 },
|
|
"email": {
|
|
"anyOf": [
|
|
{
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "email",
|
|
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
|
|
},
|
|
{ "type": "string", "const": "" }
|
|
]
|
|
},
|
|
{ "type": "null" }
|
|
]
|
|
}
|
|
},
|
|
"required": ["id", "name"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/{userId}/changePassword": {
|
|
"patch": {
|
|
"operationId": "userRouter-changePassword",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [{ "in": "path", "name": "userId", "schema": { "type": "string" }, "required": true }],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"previousPassword": { "type": "string", "minLength": 1 },
|
|
"password": { "type": "string", "minLength": 8, "maxLength": 255 },
|
|
"confirmPassword": { "type": "string" }
|
|
},
|
|
"required": ["previousPassword", "password", "confirmPassword"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/changeHome": {
|
|
"patch": {
|
|
"operationId": "userRouter-changeHomeBoards",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"homeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"mobileHomeBoardId": { "anyOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"userId": { "type": "string" }
|
|
},
|
|
"required": ["homeBoardId", "mobileHomeBoardId", "userId"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/changeSearchEngine": {
|
|
"patch": {
|
|
"operationId": "userRouter-changeDefaultSearchEngine",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"deprecated": true,
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"defaultSearchEngineId": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] },
|
|
"ddgBangsEnabled": { "type": "boolean" },
|
|
"userId": { "type": "string" }
|
|
},
|
|
"required": ["defaultSearchEngineId", "ddgBangsEnabled", "userId"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/search-preferences": {
|
|
"patch": {
|
|
"operationId": "userRouter-changeSearchPreferences",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"defaultSearchEngineId": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] },
|
|
"openInNewTab": { "type": "boolean" },
|
|
"ddgBangsEnabled": { "type": "boolean" },
|
|
"userId": { "type": "string" }
|
|
},
|
|
"required": ["defaultSearchEngineId", "openInNewTab", "ddgBangsEnabled", "userId"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/changeScheme": {
|
|
"patch": {
|
|
"operationId": "userRouter-changeColorScheme",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "colorScheme": { "type": "string", "enum": ["auto", "light", "dark"] } },
|
|
"required": ["colorScheme"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/ddg-bangs": {
|
|
"patch": {
|
|
"operationId": "userRouter-changeDdgBangs",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"deprecated": true,
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": { "ddgBangs": { "type": "boolean" }, "id": { "type": "string" } },
|
|
"required": ["ddgBangs", "id"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/firstDayOfWeek": {
|
|
"patch": {
|
|
"operationId": "userRouter-changeFirstDayOfWeek",
|
|
"tags": ["users"],
|
|
"security": [{ "apikey": [] }],
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"firstDayOfWeek": { "type": "number", "minimum": 0, "maximum": 6 },
|
|
"id": { "type": "string" }
|
|
},
|
|
"required": ["firstDayOfWeek", "id"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": { "description": "Successful response", "content": { "application/json": { "schema": {} } } },
|
|
"400": {
|
|
"description": "Invalid input data",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }
|
|
},
|
|
"401": {
|
|
"description": "Authorization not provided",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }
|
|
},
|
|
"403": {
|
|
"description": "Insufficient access",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }
|
|
},
|
|
"404": {
|
|
"description": "Not found",
|
|
"content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"content": {
|
|
"application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"error.BAD_REQUEST": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": { "type": "string", "description": "The error message", "example": "Invalid input data" },
|
|
"code": { "type": "string", "description": "The error code", "example": "BAD_REQUEST" },
|
|
"issues": {
|
|
"description": "An array of issues that were responsible for the error",
|
|
"example": [],
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "message": { "type": "string" } },
|
|
"required": ["message"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": ["message", "code"],
|
|
"additionalProperties": false,
|
|
"title": "Invalid input data error (400)",
|
|
"description": "The error information",
|
|
"example": { "code": "BAD_REQUEST", "message": "Invalid input data", "issues": [] }
|
|
},
|
|
"error.UNAUTHORIZED": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": { "type": "string", "description": "The error message", "example": "Authorization not provided" },
|
|
"code": { "type": "string", "description": "The error code", "example": "UNAUTHORIZED" },
|
|
"issues": {
|
|
"description": "An array of issues that were responsible for the error",
|
|
"example": [],
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "message": { "type": "string" } },
|
|
"required": ["message"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": ["message", "code"],
|
|
"additionalProperties": false,
|
|
"title": "Authorization not provided error (401)",
|
|
"description": "The error information",
|
|
"example": { "code": "UNAUTHORIZED", "message": "Authorization not provided", "issues": [] }
|
|
},
|
|
"error.FORBIDDEN": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": { "type": "string", "description": "The error message", "example": "Insufficient access" },
|
|
"code": { "type": "string", "description": "The error code", "example": "FORBIDDEN" },
|
|
"issues": {
|
|
"description": "An array of issues that were responsible for the error",
|
|
"example": [],
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "message": { "type": "string" } },
|
|
"required": ["message"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": ["message", "code"],
|
|
"additionalProperties": false,
|
|
"title": "Insufficient access error (403)",
|
|
"description": "The error information",
|
|
"example": { "code": "FORBIDDEN", "message": "Insufficient access", "issues": [] }
|
|
},
|
|
"error.NOT_FOUND": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": { "type": "string", "description": "The error message", "example": "Not found" },
|
|
"code": { "type": "string", "description": "The error code", "example": "NOT_FOUND" },
|
|
"issues": {
|
|
"description": "An array of issues that were responsible for the error",
|
|
"example": [],
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "message": { "type": "string" } },
|
|
"required": ["message"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": ["message", "code"],
|
|
"additionalProperties": false,
|
|
"title": "Not found error (404)",
|
|
"description": "The error information",
|
|
"example": { "code": "NOT_FOUND", "message": "Not found", "issues": [] }
|
|
},
|
|
"error.INTERNAL_SERVER_ERROR": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": { "type": "string", "description": "The error message", "example": "Internal server error" },
|
|
"code": { "type": "string", "description": "The error code", "example": "INTERNAL_SERVER_ERROR" },
|
|
"issues": {
|
|
"description": "An array of issues that were responsible for the error",
|
|
"example": [],
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": { "message": { "type": "string" } },
|
|
"required": ["message"],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": ["message", "code"],
|
|
"additionalProperties": false,
|
|
"title": "Internal server error error (500)",
|
|
"description": "The error information",
|
|
"example": { "code": "INTERNAL_SERVER_ERROR", "message": "Internal server error", "issues": [] }
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"apikey": {
|
|
"type": "apiKey",
|
|
"name": "ApiKey",
|
|
"description": "API key which can be obtained in the Homarr administration dashboard",
|
|
"in": "header"
|
|
}
|
|
}
|
|
}
|
|
}
|