2025-12-12 15:07:46 +03:00
<!DOCTYPE html>
< html lang = "en" >
< head >
2025-12-13 10:17:15 +03:00
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > XUI.ONE Admin API Documentation</ title >
< link rel = "stylesheet" type = "text/css" href = "https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui.css" >
< link rel = "icon" type = "image/png" href = "https://raw.githubusercontent.com/swagger-api/swagger-ui/master/dist/favicon-32x32.png" >
< style >
* {
margin : 0 ;
padding : 0 ;
box-sizing : border-box ;
}
: root {
--bg-primary : #ffffff ;
--bg-secondary : #f8f9fa ;
--bg-header : #2c3e50 ;
--text-primary : #2c3e50 ;
--text-secondary : #7f8c8d ;
--text-header : #ffffff ;
--border-color : #e1e4e8 ;
--accent-color : #3498db ;
--accent-hover : #2980b9 ;
--code-bg : #f6f8fa ;
--shadow : 0 2 px 8 px rgba ( 0 , 0 , 0 , 0.1 );
--switch-bg : #ccc ;
--switch-checked : #2196F3 ;
}
[ data-theme = "dark" ] {
--bg-primary : #1e1e1e ;
--bg-secondary : #2d2d2d ;
--bg-header : #1a1a1a ;
--text-primary : #e0e0e0 ;
--text-secondary : #b0b0b0 ;
--text-header : #ffffff ;
--border-color : #3a3a3a ;
--accent-color : #4a9eff ;
--accent-hover : #357abd ;
--code-bg : #2d2d2d ;
--shadow : 0 2 px 8 px rgba ( 0 , 0 , 0 , 0.3 );
--switch-bg : #555 ;
--switch-checked : #4a9eff ;
}
body {
font-family : - apple-system , BlinkMacSystemFont , "Segoe UI" , Roboto , "Helvetica Neue" , Arial , sans-serif ;
background-color : var ( -- bg - primary );
color : var ( -- text - primary );
transition : background-color 0.3 s ease , color 0.3 s ease ;
line-height : 1.6 ;
}
/* Header Styles */
. header {
background : var ( -- bg - header );
color : var ( -- text - header );
padding : 0 ;
position : sticky ;
top : 0 ;
z-index : 1000 ;
box-shadow : var ( -- shadow );
}
. header-top {
display : flex ;
justify-content : space-between ;
align-items : center ;
padding : 1 rem 2 rem ;
max-width : 1400 px ;
margin : 0 auto ;
}
. header-title {
display : flex ;
align-items : center ;
gap : 1 rem ;
}
. header-title h1 {
font-size : 1.5 rem ;
font-weight : 600 ;
}
. version-badges {
display : flex ;
gap : 0.5 rem ;
}
. badge {
padding : 0.25 rem 0.75 rem ;
border-radius : 12 px ;
font-size : 0.75 rem ;
font-weight : 600 ;
}
. badge-version {
background : #27ae60 ;
color : white ;
}
. badge-oas {
background : #f39c12 ;
color : white ;
}
/* Theme Toggle Switch */
. theme-controls {
display : flex ;
align-items : center ;
gap : 1 rem ;
}
. theme-switch-wrapper {
display : flex ;
align-items : center ;
gap : 0.5 rem ;
}
. theme-switch {
position : relative ;
display : inline-block ;
width : 50 px ;
height : 24 px ;
}
. theme-switch input {
opacity : 0 ;
width : 0 ;
height : 0 ;
}
. slider {
position : absolute ;
cursor : pointer ;
top : 0 ;
left : 0 ;
right : 0 ;
bottom : 0 ;
background-color : var ( -- switch - bg );
transition : 0.4 s ;
border-radius : 24 px ;
}
. slider : before {
position : absolute ;
content : "" ;
height : 18 px ;
width : 18 px ;
left : 3 px ;
bottom : 3 px ;
background-color : white ;
transition : 0.4 s ;
border-radius : 50 % ;
}
input : checked + . slider {
background-color : var ( -- switch - checked );
}
input : checked + . slider : before {
transform : translateX ( 26 px );
}
. theme-icon {
font-size : 1.2 rem ;
}
/* Navigation Tabs */
. nav-tabs {
background : var ( -- bg - header );
border-top : 1 px solid rgba ( 255 , 255 , 255 , 0.1 );
}
. nav-tabs-container {
display : flex ;
max-width : 1400 px ;
margin : 0 auto ;
padding : 0 2 rem ;
}
. nav-tab {
padding : 1 rem 2 rem ;
cursor : pointer ;
border : none ;
background : transparent ;
color : rgba ( 255 , 255 , 255 , 0.7 );
font-size : 1 rem ;
font-weight : 500 ;
border-bottom : 3 px solid transparent ;
transition : all 0.3 s ease ;
display : flex ;
align-items : center ;
gap : 0.5 rem ;
}
. nav-tab : hover {
color : rgba ( 255 , 255 , 255 , 0.9 );
background : rgba ( 255 , 255 , 255 , 0.05 );
}
. nav-tab . active {
color : white ;
border-bottom-color : var ( -- accent - color );
}
. nav-tab-icon {
font-size : 1.2 rem ;
}
/* Content Sections */
. content-section {
display : none ;
animation : fadeIn 0.3 s ease ;
}
. content-section . active {
display : block ;
}
@ keyframes fadeIn {
from { opacity : 0 ; transform : translateY ( 10 px ); }
to { opacity : 1 ; transform : translateY ( 0 ); }
}
/* General Documentation Styles */
. docs-container {
max-width : 1200 px ;
margin : 0 auto ;
padding : 2 rem ;
}
. alert {
padding : 1 rem 1.5 rem ;
border-radius : 8 px ;
margin-bottom : 2 rem ;
border-left : 4 px solid ;
background : var ( -- bg - secondary );
}
. alert-info {
border-left-color : #3498db ;
}
. alert-icon {
margin-right : 0.5 rem ;
}
. docs-title {
font-size : 2.5 rem ;
margin-bottom : 0.5 rem ;
color : var ( -- text - primary );
}
. docs-subtitle {
font-size : 1.1 rem ;
color : var ( -- text - secondary );
margin-bottom : 2 rem ;
}
. section {
margin-bottom : 3 rem ;
}
. section-title {
font-size : 1.8 rem ;
margin-bottom : 1 rem ;
color : var ( -- text - primary );
display : flex ;
align-items : center ;
gap : 0.5 rem ;
}
. section-icon {
font-size : 1.5 rem ;
}
. section-content {
background : var ( -- bg - secondary );
padding : 1.5 rem ;
border-radius : 8 px ;
border : 1 px solid var ( -- border - color );
}
. code-block {
background : var ( -- code - bg );
padding : 1 rem ;
border-radius : 6 px ;
border : 1 px solid var ( -- border - color );
overflow-x : auto ;
font-family : 'Courier New' , monospace ;
font-size : 0.9 rem ;
margin : 1 rem 0 ;
}
. code-inline {
background : var ( -- code - bg );
padding : 0.2 rem 0.4 rem ;
border-radius : 3 px ;
font-family : 'Courier New' , monospace ;
font-size : 0.9 em ;
border : 1 px solid var ( -- border - color );
}
. list-styled {
list-style : none ;
padding-left : 0 ;
}
. list-styled li {
padding : 0.5 rem 0 ;
padding-left : 1.5 rem ;
position : relative ;
}
. list-styled li : before {
content : "▸" ;
position : absolute ;
left : 0 ;
color : var ( -- accent - color );
font-weight : bold ;
}
. highlight {
color : var ( -- accent - color );
font-weight : 600 ;
}
. link {
color : var ( -- accent - color );
text-decoration : none ;
transition : color 0.3 s ease ;
}
. link : hover {
color : var ( -- accent - hover );
text-decoration : underline ;
}
. btn {
display : inline-block ;
padding : 0.75 rem 1.5 rem ;
background : var ( -- accent - color );
color : white ;
text-decoration : none ;
border-radius : 6 px ;
font-weight : 500 ;
transition : all 0.3 s ease ;
border : none ;
cursor : pointer ;
font-size : 1 rem ;
}
. btn : hover {
background : var ( -- accent - hover );
transform : translateY ( -2 px );
box-shadow : 0 4 px 12 px rgba ( 52 , 152 , 219 , 0.3 );
}
. btn-group {
display : flex ;
gap : 1 rem ;
margin-top : 1.5 rem ;
}
/* Swagger UI Container */
. swagger-container {
max-width : 1400 px ;
margin : 0 auto ;
padding : 2 rem ;
}
2025-12-15 09:37:24 +03:00
/* Swagger UI Light Theme Customization */
# swagger-ui div . scheme-container {
background-color : rgba ( 52 , 73 , 94 , 0.09 );
}
2025-12-15 10:30:44 +03:00
/* Swagger UI Light Theme Variables */
: root {
/* primary colors */
--swagger-color : #4c9325 ;
--link-color : #407ec9 ;
--accept-header-color : #619929 ;
/* methods colors */
--post-method-color : #619929 ;
--post-method-background-color : rgba ( 0 , 0 , 0 , .0 );
--get-method-color : #57A9D7 ;
--get-method-background-color : rgba ( 0 , 0 , 0 , .0 );
--head-method-color : #9B2393 ;
--head-method-background-color : rgba ( 0 , 0 , 0 , .0 );
--put-method-color : #0B4F79 ;
--put-method-background-color : rgba ( 0 , 0 , 0 , .0 );
--delete-method-color : #D12F1B ;
--delete-method-background-color : rgba ( 0 , 0 , 0 , .0 );
--options-method-color : #000000 ;
--options-method-background-color : rgba ( 0 , 0 , 0 , .0 );
--patch-method-color : #0E0EFF ;
--patch-method-background-color : rgba ( 0 , 0 , 0 , .0 );
/* background */
--all-bg-color : #ffffff ;
--secondary-bg-color : #F2F2F2 ;
--header-bg-color : #619929 ;
--block-bg-color : #E9E9E9 ;
--selecter-bg-color : #F2F2F2 ;
/* text */
--primary-text-color : rgb ( 0 , 0 , 0 );
--secondary-text-color : rgba ( 0 , 0 , 0 , 0.4 );
/* border */
--block-border-color : rgba ( 0 , 0 , 0 , 0.08 );
--block-border-radius : 12 px ;
--innner-block-border-radius : 8 px ;
/* icons */
--primary-icon-color : #000000 ;
--icons-opacity : none ;
--secondary-icon-opacity : none ;
--black-icons-filter : none ;
}
/* Swagger UI Dark Theme Variables */
[ data-theme = "dark" ] {
/* primary colors */
--swagger-color : #62a03f ;
--link-color : #2e82e5 ;
--accept-header-color : #47b750 ;
/* methods colors */
--post-method-color : rgb ( 141 , 199 , 111 );
--post-method-background-color : rgba ( 141 , 199 , 111 , .08 );
--get-method-color : rgb ( 74 , 176 , 244 );
--get-method-background-color : rgba ( 74 , 176 , 244 , .08 );
--head-method-color : rgb ( 217 , 115 , 234 );
--head-method-background-color : rgba ( 217 , 115 , 234 , .08 );
--put-method-color : rgb ( 189 , 135 , 86 );
--put-method-background-color : rgba ( 189 , 135 , 86 , .08 );
--delete-method-color : rgb ( 237 , 99 , 113 );
--delete-method-background-color : rgba ( 237 , 99 , 113 , .08 );
--options-method-color : rgb ( 210 , 175 , 60 );
--options-method-background-color : rgba ( 210 , 175 , 60 , .08 );
--patch-method-color : rgb ( 113 , 128 , 147 );
--patch-method-background-color : rgba ( 113 , 128 , 147 , .08 );
/* background */
--all-bg-color : #272C35 ;
--secondary-bg-color : #272C35 ;
--header-bg-color : #313845 ;
--block-bg-color : #20252C ;
--selecter-bg-color : #313845 ;
/* text */
--primary-text-color : rgb ( 179 , 187 , 201 );
--secondary-text-color : rgba ( 177 , 203 , 255 , 0.3 );
/* border */
--block-border-color : rgba ( 220 , 220 , 255 , 0.1 );
--block-border-radius : 6 px ;
--innner-block-border-radius : 2 px ;
/* icons */
--primary-icon-color : rgb ( 179 , 187 , 201 );
--icons-opacity : .28 ;
--secondary-icon-opacity : .5 ;
--black-icons-filter : invert ( 1 );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
/* Apply Swagger Theme Variables to Swagger UI */
. swagger-ui {
background : var ( -- all - bg - color );
2025-12-15 09:48:32 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . topbar {
background-color : var ( -- header - bg - color );
border-bottom : 2 px solid var ( -- header - bg - color );
2025-12-15 09:48:32 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . info {
background : var ( -- all - bg - color );
2025-12-15 09:37:24 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . info . title ,
. swagger-ui . info p ,
. swagger-ui . info li ,
. swagger-ui . opblock-tag ,
. swagger-ui . opblock . opblock-summary-description ,
. swagger-ui . opblock . opblock-summary-path ,
. swagger-ui . parameter__name ,
. swagger-ui . parameter__type ,
. swagger-ui . response-col_status ,
. swagger-ui table thead tr th ,
. swagger-ui table tbody tr td ,
. swagger-ui label ,
. swagger-ui h4 ,
. swagger-ui h5 {
color : var ( -- primary - text - color ) !important ;
2025-12-15 10:08:55 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . info . title small ,
. swagger-ui . info . description p ,
. swagger-ui . opblock-description-wrapper p ,
. swagger-ui . parameter__type ,
. swagger-ui . prop-format {
color : var ( -- secondary - text - color ) !important ;
2025-12-15 10:08:55 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . scheme-container {
background : var ( -- secondary - bg - color );
border : 1 px solid var ( -- block - border - color );
border-radius : var ( -- block - border - radius );
2025-12-15 10:08:55 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock-tag-section {
background : var ( -- all - bg - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock {
background : var ( -- block - bg - color );
border : 1 px solid var ( -- block - border - color );
border-radius : var ( -- block - border - radius );
margin-bottom : 15 px ;
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-summary {
background : var ( -- block - bg - color );
border-radius : var ( -- block - border - radius );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-get {
border-color : var ( -- get - method - color );
background : var ( -- get - method - background - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-get . opblock-summary-method {
background : var ( -- get - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-get . opblock-summary {
border-color : var ( -- get - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-post {
border-color : var ( -- post - method - color );
background : var ( -- post - method - background - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-post . opblock-summary-method {
background : var ( -- post - method - color );
2025-12-15 10:17:47 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-post . opblock-summary {
border-color : var ( -- post - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-put {
border-color : var ( -- put - method - color );
background : var ( -- put - method - background - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-put . opblock-summary-method {
background : var ( -- put - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-put . opblock-summary {
border-color : var ( -- put - method - color );
2025-12-15 10:17:47 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-delete {
border-color : var ( -- delete - method - color );
background : var ( -- delete - method - background - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-delete . opblock-summary-method {
background : var ( -- delete - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-delete . opblock-summary {
border-color : var ( -- delete - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-head {
border-color : var ( -- head - method - color );
background : var ( -- head - method - background - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-head . opblock-summary-method {
background : var ( -- head - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-head . opblock-summary {
border-color : var ( -- head - method - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-options {
border-color : var ( -- options - method - color );
background : var ( -- options - method - background - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock . opblock-options . opblock-summary-method {
background : var ( -- options - method - color );
}
. swagger-ui . opblock . opblock-options . opblock-summary {
border-color : var ( -- options - method - color );
}
. swagger-ui . opblock . opblock-patch {
border-color : var ( -- patch - method - color );
background : var ( -- patch - method - background - color );
}
. swagger-ui . opblock . opblock-patch . opblock-summary-method {
background : var ( -- patch - method - color );
}
. swagger-ui . opblock . opblock-patch . opblock-summary {
border-color : var ( -- patch - method - color );
}
. swagger-ui . opblock-body ,
. swagger-ui . opblock-description-wrapper ,
. swagger-ui . opblock-section-header {
background : var ( -- block - bg - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui input [ type = text ],
. swagger-ui input [ type = password ],
. swagger-ui input [ type = email ],
. swagger-ui textarea ,
. swagger-ui select {
background : var ( -- selecter - bg - color );
border : 1 px solid var ( -- block - border - color );
border-radius : var ( -- innner - block - border - radius );
color : var ( -- primary - text - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . btn {
background : var ( -- secondary - bg - color );
color : var ( -- primary - text - color );
border : 1 px solid var ( -- block - border - color );
border-radius : var ( -- innner - block - border - radius );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . btn . execute {
background : var ( -- link - color );
color : #fff ;
border-color : var ( -- link - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui table thead tr th ,
. swagger-ui table thead tr td {
background : var ( -- secondary - bg - color );
border-color : var ( -- block - border - color );
2025-12-15 10:17:47 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui table tbody tr td {
background : var ( -- block - bg - color );
border-color : var ( -- block - border - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . model-box ,
. swagger-ui . model {
background : var ( -- block - bg - color );
border : 1 px solid var ( -- block - border - color );
border-radius : var ( -- block - border - radius );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . model-title {
background : var ( -- secondary - bg - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui a {
color : var ( -- link - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui a : hover {
color : var ( -- swagger - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . authorization__btn {
background : transparent ;
border-color : var ( -- link - color );
color : var ( -- link - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . authorization__btn . unlocked {
border-color : var ( -- accept - header - color );
color : var ( -- accept - header - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . dialog-ux . modal-ux {
background : var ( -- block - bg - color );
border : 1 px solid var ( -- block - border - color );
border-radius : var ( -- block - border - radius );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . dialog-ux . modal-ux-header {
background : var ( -- secondary - bg - color );
border-bottom : 1 px solid var ( -- block - border - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . highlight-code {
background : var ( -- selecter - bg - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . opblock-tag {
border-bottom : 1 px solid var ( -- block - border - color );
2025-12-13 10:17:15 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . prop-type {
color : var ( -- swagger - color );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui svg {
fill : var ( -- primary - icon - color );
opacity : var ( -- icons - opacity );
2025-12-13 10:55:29 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui . arrow svg {
opacity : var ( -- secondary - icon - opacity );
2025-12-13 10:17:15 +03:00
}
2025-12-15 10:30:44 +03:00
. swagger-ui img {
filter : var ( -- black - icons - filter );
2025-12-13 10:17:15 +03:00
}
2025-12-15 10:48:41 +03:00
/* Dark Theme Specific Overrides */
[ data-theme = "dark" ] . swagger-ui . markdown code ,
[ data-theme = "dark" ] . swagger-ui . renderedMarkdown code {
background : rgb ( 12 , 11 , 11 );
color : #62a03f ;
}
[ data-theme = "dark" ] . swagger-ui . opblock-description-wrapper ,
[ data-theme = "dark" ] . swagger-ui . opblock-external-docs-wrapper ,
[ data-theme = "dark" ] . swagger-ui . opblock-title_normal {
color : #7d8293 ;
}
[ data-theme = "dark" ] . swagger-ui . info . title small ,
[ data-theme = "dark" ] . swagger-ui . info . description p ,
[ data-theme = "dark" ] . swagger-ui . opblock-description-wrapper p ,
[ data-theme = "dark" ] . swagger-ui . parameter__type ,
[ data-theme = "dark" ] . swagger-ui . prop-format {
color : #e8e8e8 !important ;
}
[ data-theme = "dark" ] . swagger-ui . opblock . opblock-section-header {
background : hsl ( 0 deg 0 % 7.23 % / 80 % );
}
2025-12-15 11:00:42 +03:00
[ data-theme = "dark" ] . swagger-ui . example . microlight {
2025-12-15 10:48:41 +03:00
background : rgb ( 20 , 20 , 20 );
}
2025-12-15 10:17:47 +03:00
2025-12-15 11:14:36 +03:00
[ data-theme = "dark" ] . swagger-ui . opblock-body pre . microlight {
background : rgb ( 20 , 20 , 20 );
}
2025-12-15 11:20:58 +03:00
[ data-theme = "dark" ] . swagger-ui . responses-wrapper . response-col_description pre ,
[ data-theme = "dark" ] . swagger-ui . responses-wrapper pre . microlight ,
[ data-theme = "dark" ] . swagger-ui . model-example pre ,
[ data-theme = "dark" ] . swagger-ui . highlight-code pre {
background : rgb ( 20 , 20 , 20 ) !important ;
}
2025-12-15 11:07:44 +03:00
/* Table Data */
[ data-theme = "dark" ] . servers tr td {
background-color : transparent !important ;
}
/* Computed url */
[ data-theme = "dark" ] . servers div . computed-url {
color : #ecf0f1 ;
}
/* Servers title */
[ data-theme = "dark" ] . schemes div . servers-title {
color : #ecf0f1 ;
}
/* Heading */
[ data-theme = "dark" ] . servers div h4 {
color : #ecf0f1 !important ;
}
2025-12-15 11:30:12 +03:00
/* Operations tag - for all */
[ data-theme = "dark" ] [ id ^= "operations-tag-" ] {
color : #e1e9e9 !important ;
}
/* Small Tag */
[ data-theme = "dark" ] [ id ^= "operations-tag-" ] small {
color : #95a5a6 ;
}
/* Span Tag - All operations */
[ data-theme = "dark" ] [ id ^= "operations-" ] . opblock-summary-path span {
color : #3498db ;
}
2025-12-15 10:17:47 +03:00
2025-12-13 10:17:15 +03:00
/* Responsive */
@ media ( max-width : 768px ) {
. header-top {
flex-direction : column ;
gap : 1 rem ;
align-items : flex-start ;
}
. nav-tabs-container {
overflow-x : auto ;
}
. nav-tab {
padding : 1 rem ;
white-space : nowrap ;
}
. docs-container , . swagger-container {
padding : 1 rem ;
}
. docs-title {
font-size : 2 rem ;
}
. btn-group {
flex-direction : column ;
}
}
/* Quick Links Grid */
. quick-links {
display : grid ;
grid-template-columns : repeat ( auto - fit , minmax ( 250 px , 1 fr ));
gap : 1 rem ;
margin-top : 1.5 rem ;
}
. quick-link-card {
background : var ( -- bg - secondary );
padding : 1.5 rem ;
border-radius : 8 px ;
border : 1 px solid var ( -- border - color );
transition : all 0.3 s ease ;
cursor : pointer ;
}
. quick-link-card : hover {
transform : translateY ( -4 px );
box-shadow : var ( -- shadow );
border-color : var ( -- accent - color );
}
. quick-link-card h3 {
color : var ( -- accent - color );
margin-bottom : 0.5 rem ;
font-size : 1.2 rem ;
}
. quick-link-card p {
color : var ( -- text - secondary );
font-size : 0.95 rem ;
}
</ style >
2025-12-12 15:07:46 +03:00
</ head >
< body >
2025-12-13 10:17:15 +03:00
<!-- Header -->
< div class = "header" >
< div class = "header-top" >
< div class = "header-title" >
< h1 > XUI.ONE Admin API</ h1 >
< div class = "version-badges" >
< span class = "badge badge-version" > v1.5.13</ span >
< span class = "badge badge-oas" > OAS 3.0</ span >
</ div >
</ div >
< div class = "theme-controls" >
< div class = "theme-switch-wrapper" >
< span class = "theme-icon" > ☀️</ span >
< label class = "theme-switch" >
< input type = "checkbox" id = "theme-toggle" >
< span class = "slider" ></ span >
</ label >
< span class = "theme-icon" > 🌙</ span >
</ div >
</ div >
</ div >
<!-- Navigation Tabs -->
< div class = "nav-tabs" >
< div class = "nav-tabs-container" >
< button class = "nav-tab active" onclick = "switchTab('docs')" >
< span class = "nav-tab-icon" > 📚</ span >
General Documentation
</ button >
< button class = "nav-tab" onclick = "switchTab('swagger')" >
< span class = "nav-tab-icon" > 🔧</ span >
Swagger API
</ button >
</ div >
</ div >
2025-12-12 15:07:46 +03:00
</ div >
2025-12-13 10:17:15 +03:00
<!-- General Documentation Section -->
< div id = "docs-section" class = "content-section active" >
< div class = "docs-container" >
< div class = "alert alert-info" >
< span class = "alert-icon" > 📢</ span >
< strong > Note:</ strong > This documentation is for XUI.ONE v1.5.13+. Replace placeholder values with your actual credentials.
</ div >
2025-12-13 10:40:13 +03:00
< div class = "alert alert-info" style = "border-left-color: #e67e22;" >
< span class = "alert-icon" > ⚠️</ span >
< strong > CORS Notice - "Try it out" Feature:</ strong > When testing API endpoints directly in Swagger UI using the "Try it out" button, you may encounter a < code class = "code-inline" > Failed to fetch</ code > error. This is < strong > NORMAL and EXPECTED</ strong > browser behavior due to CORS (Cross-Origin Resource Security) policy.
< br >< br >
< strong > Why this happens:</ strong > Your browser blocks requests from this documentation site (GitHub Pages) to your XUI.ONE server for security reasons.
< br >< br >
< strong > Solutions for testing:</ strong >
< ul class = "list-styled" style = "margin-top: 0.5rem;" >
< li > ✅ Use cURL commands (copy from Swagger UI examples)</ li >
< li > ✅ Use Postman, Insomnia, or similar API tools</ li >
< li > ✅ Use the code examples (Python, PHP, JavaScript)</ li >
< li > ⚙️ Temporarily enable CORS on your server (not recommended for production)</ li >
</ ul >
< strong > Important:</ strong > This CORS error does NOT mean the documentation or API is broken. It's a browser security feature protecting your server.
</ div >
2025-12-13 10:17:15 +03:00
< h2 class = "docs-title" > XUI.ONE Admin API Documentation</ h2 >
< p class = "docs-subtitle" > Comprehensive API documentation for XUI.ONE IPTV Panel Administration</ p >
<!-- Quick Start -->
< div class = "section" >
< h3 class = "section-title" >
< span class = "section-icon" > 🎯</ span >
Quick Start
</ h3 >
< div class = "section-content" >
< p > This API provides programmatic access to manage your IPTV platform with < span class = "highlight" > 111 endpoints</ span > for:</ p >
< ul class = "list-styled" >
< li > 📺 Manage subscriptions (Lines, MAG, Enigma2 devices)</ li >
< li > 🎬 Control streams, channels, movies, and series</ li >
< li > 📊 Monitor connections and activity logs</ li >
< li > ⚙️ Configure servers and load balancers</ li >
</ ul >
</ div >
</ div >
<!-- Base URL Pattern -->
< div class = "section" >
< h3 class = "section-title" >
< span class = "section-icon" > 🔗</ span >
Base URL Pattern
</ h3 >
< div class = "section-content" >
< div class = "code-block" >
{protocol}://YOUR_SERVER:{port}/< Access-Code> /?api_key=< API-KEY> & action=ACTION
</ div >
< p >< strong > Customize:</ strong ></ p >
< ul class = "list-styled" >
< li >< code class = "code-inline" > {protocol}</ code > → http or https</ li >
< li >< code class = "code-inline" > YOUR_SERVER</ code > → Your server domain/IP (e.g., 192.168.1.100)</ li >
< li >< code class = "code-inline" > {port}</ code > → Your port (80, 8000, 9000, or custom)</ li >
< li >< code class = "code-inline" > < Access-Code> </ code > → Your access code (e.g., < code class = "code-inline" > cSbuFLhp</ code > )</ li >
< li >< code class = "code-inline" > < API-KEY> </ code > → Your API key</ li >
< li >< code class = "code-inline" > ACTION</ code > → API action name (e.g., < code class = "code-inline" > get_lines</ code > )</ li >
</ ul >
</ div >
</ div >
<!-- Authentication Setup -->
< div class = "section" >
< h3 class = "section-title" >
< span class = "section-icon" > 🔐</ span >
Authentication Setup
</ h3 >
< div class = "section-content" >
< p >< strong > Required:</ strong ></ p >
< ol style = "padding-left: 1.5rem;" >
< li > XUI.ONE panel installed (v1.5.5+)</ li >
< li > Admin API access code created</ li >
< li > API key generated from profile</ li >
</ ol >
< br >
< p >< strong > Quick Setup:</ strong ></ p >
< ol style = "padding-left: 1.5rem;" >
< li > Panel → Management → Access Control → Access Codes</ li >
< li > Create "Admin API" access code</ li >
< li > Profile → Generate API Key</ li >
< li > Test: < code class = "code-inline" > curl "http://your-server.com/< Access-Code> /?api_key=< API-KEY> & action=user_info"</ code ></ li >
</ ol >
</ div >
</ div >
<!-- Request Methods -->
< div class = "section" >
< h3 class = "section-title" >
< span class = "section-icon" > 📝</ span >
Request Methods
</ h3 >
< div class = "section-content" >
< p >< strong > GET</ strong > - Query data</ p >
< div class = "code-block" >
/?api_key=< API-KEY> & action=get_lines
</ div >
< p >< strong > POST</ strong > - Create/update data</ p >
< div class = "code-block" >
curl -X POST ".../?api_key=< API-KEY> & action=create_line" -d "username=test"
</ div >
</ div >
</ div >
<!-- Response Format -->
< div class = "section" >
< h3 class = "section-title" >
< span class = "section-icon" > ✅</ span >
Response Format
</ h3 >
< div class = "section-content" >
< p >< strong > Success:</ strong ></ p >
< div class = "code-block" >
{
"status": "STATUS_SUCCESS",
"data": { ... }
}
</ div >
< p >< strong > Error:</ strong ></ p >
< div class = "code-block" >
{
"status": "STATUS_FAILURE",
"error": "Error description"
}
</ div >
</ div >
</ div >
<!-- Quick Links -->
< div class = "section" >
< h3 class = "section-title" >
< span class = "section-icon" > 🚀</ span >
Quick Links
</ h3 >
< div class = "quick-links" >
< div class = "quick-link-card" onclick = "switchTab('swagger')" >
< h3 > 🔧 Interactive API</ h3 >
< p > Try the API directly in Swagger UI with live testing</ p >
</ div >
< a href = "https://github.com/worldofiptvcom/xui-one-api-docs" target = "_blank" style = "text-decoration: none; color: inherit;" >
< div class = "quick-link-card" >
< h3 > 💾 GitHub Repository</ h3 >
< p > View source code and contribute to the project</ p >
</ div >
</ a >
< a href = "https://github.com/worldofiptvcom/xui-one-api-docs/blob/main/docs/getting-started.md" target = "_blank" style = "text-decoration: none; color: inherit;" >
< div class = "quick-link-card" >
< h3 > 📖 Getting Started</ h3 >
< p > Detailed setup guide and tutorials</ p >
</ div >
</ a >
< a href = "https://github.com/worldofiptvcom/xui-one-api-docs/tree/main/docs/categories" target = "_blank" style = "text-decoration: none; color: inherit;" >
< div class = "quick-link-card" >
< h3 > 📚 Code Examples</ h3 >
< p > Python, PHP, JavaScript examples for all endpoints</ p >
</ div >
</ a >
</ div >
</ div >
< div class = "btn-group" >
< button class = "btn" onclick = "switchTab('swagger')" > Start Testing API →</ button >
< a href = "https://github.com/worldofiptvcom/xui-one-api-docs" target = "_blank" class = "btn" style = "background: #27ae60;" > View on GitHub</ a >
</ div >
</ div >
</ div >
<!-- Swagger API Section -->
< div id = "swagger-section" class = "content-section" >
< div class = "swagger-container" >
< div id = "swagger-ui" ></ div >
</ div >
</ div >
< script src = "https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-bundle.js" ></ script >
< script src = "https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-standalone-preset.js" ></ script >
< script >
// Theme Toggle
const themeToggle = document . getElementById ( 'theme-toggle' );
const currentTheme = localStorage . getItem ( 'theme' ) || 'light' ;
document . documentElement . setAttribute ( 'data-theme' , currentTheme );
if ( currentTheme === 'dark' ) {
themeToggle . checked = true ;
}
themeToggle . addEventListener ( 'change' , function () {
const theme = this . checked ? 'dark' : 'light' ;
document . documentElement . setAttribute ( 'data-theme' , theme );
localStorage . setItem ( 'theme' , theme );
2025-12-12 15:31:00 +03:00
});
2025-12-13 10:17:15 +03:00
// Tab Switching
function switchTab ( tabName ) {
// Update tab buttons
document . querySelectorAll ( '.nav-tab' ). forEach ( tab => {
tab . classList . remove ( 'active' );
});
event . target . closest ( '.nav-tab' ). classList . add ( 'active' );
// Update content sections
document . querySelectorAll ( '.content-section' ). forEach ( section => {
section . classList . remove ( 'active' );
});
document . getElementById ( tabName + '-section' ). classList . add ( 'active' );
// Initialize Swagger UI if not already initialized
if ( tabName === 'swagger' && ! window . swaggerInitialized ) {
initSwagger ();
}
}
// Initialize Swagger UI
let swaggerInitialized = false ;
function initSwagger () {
window . ui = SwaggerUIBundle ({
url : "./openapi.yaml" ,
dom_id : '#swagger-ui' ,
deepLinking : true ,
presets : [
SwaggerUIBundle . presets . apis ,
SwaggerUIStandalonePreset
],
plugins : [
SwaggerUIBundle . plugins . DownloadUrl
],
layout : "StandaloneLayout" ,
defaultModelsExpandDepth : 1 ,
defaultModelExpandDepth : 1 ,
docExpansion : "list" ,
filter : true ,
showExtensions : true ,
showCommonExtensions : true ,
tryItOutEnabled : true
});
window . swaggerInitialized = true ;
}
// Initialize Swagger on first swagger tab click or if URL has #swagger
if ( window . location . hash === '#swagger' ) {
switchTab ( 'swagger' );
}
</ script >
2025-12-12 15:07:46 +03:00
</ body >
</ html >