openapi: 3.0.3
info:
  title: XC_VM Admin API
  version: 1.5.13
  description: |
    Complete API documentation for XC_VM IPTV panel administration.
    
    ## 🚀 Quick Start
    
    ### 1. Configure Your Server
    At the top of this page, click **"Servers"** dropdown and enter your details:
    - **protocol**: `http` or `https`
    - **server**: Your server IP (e.g., `144.76.200.209`)
    - **port**: Your API port (e.g., `80` for HTTP, `443` for HTTPS)
    - **accessCode**: Your API access code (e.g., `cSbuFLhp`)
    
    ### 2. Authorize
    Click the **"Authorize" 🔓** button (top right) and enter your API key.
    
    **IMPORTANT:** Once you authorize, your API key is automatically added to ALL requests!
    You do NOT need to manually enter it in the "Parameters" section for each endpoint.
    
    The api_key field in Parameters will be auto-filled when you click "Execute".
    
    ### 3. Try Endpoints
    - Click any endpoint to expand it
    - Click **"Try it out"** button
    - Fill in required parameters
    - Click **"Execute"**
    - See your actual request and response!
    
    ## 💡 How to Use Interactive Examples
    
    **Don't copy static examples from descriptions!** Instead:
    
    1. ✅ Use the **"Try it out"** feature - it generates real requests with YOUR values
    2. ✅ After clicking "Execute", you'll see:
       - **Request URL** - your actual API call with real values
       - **cURL command** - copy-paste ready with your credentials
       - **Response** - actual data from your server
    
    ## 📋 API Pattern
    
    All requests follow this pattern:
    ```
    {protocol}://{server}:{port}/{accessCode}/?api_key={API_KEY}&action={ACTION}&param1=value1
    ```
    
    **Example with your configured values:**
    ```
    http://144.76.200.209:80/cSbuFLhp/?api_key=YOUR-API-KEY&action=user_info
    ```
    
    ## 🔑 Authentication
    
    - **API Key**: Required for all requests (add `?api_key=YOUR-KEY`)
    - **Generate API Key**: In XC_VM admin panel → Profile → API Settings
    - **Enter Once**: Click "Authorize" button → Enter key → Never re-enter it!
    
    **Your browser remembers:**
    - ✅ Server configuration (IP, port, access code)
    - ✅ API key (via Authorize button)
    - ✅ All settings persist across page refreshes
    
    **You only need to configure once, then just use endpoints!**
    
    ## 📖 Response Format
    
    All endpoints return JSON:
    ```json
    {
      "status": "STATUS_SUCCESS",
      "data": { ... }
    }
    ```

servers:
  - url: '{protocol}://{server}:{port}/{accessCode}'
    description: XC_VM API Server (Customizable)
    variables:
      protocol:
        default: http
        description: Protocol (http or https)
        enum:
          - http
          - https
      server:
        default: your-server.com
        description: Your XC_VM server IP or domain (e.g., 192.168.1.100 or panel.yourdomain.com)
      port:
        default: '80'
        description: API port (80 for HTTP, 9000 for HTTPS, or custom port)
      accessCode:
        default: cSbuFLhp
        description: Your unique access code for API access

security:
  - ApiKeyAuth: []

tags:
  - name: Authentication
    description: Authentication and authorization operations
  - name: Logs & Events
    description: Activity logs, connections, and monitoring
  - name: Line API
    description: M3U subscription line management
  - name: User API
    description: User account management (admins, resellers, sub-accounts)
  - name: MAG API
    description: MAG device management
  - name: Enigma API
    description: Enigma2 STB management
  - name: Streams API
    description: Live stream management
  - name: Channel API
    description: Channel management
  - name: Station API
    description: Radio station management
  - name: Movie API
    description: VOD movie management
  - name: Series API
    description: Series management
  - name: Episode API
    description: Episode management
  - name: Server API
    description: Server and load balancer management
  - name: Settings & System
    description: System settings and administrative functions

paths:
  /:
    get:
      summary: API Base Endpoint
      description: |
        Base endpoint for all API requests. All actions are performed by adding the `action` parameter.
        
        **Usage Pattern:**
        ```
        /?api_key=<API-KEY>&action=ACTION_NAME&param1=value1
        ```
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=user_info"
        ```
      operationId: apiBase
      tags:
        - Authentication
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - $ref: '#/components/parameters/Action'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/ServerError'

  /?action=user_info:
    get:
      summary: Get Current User Info
      description: |
        Retrieves information about the currently authenticated admin user.
        
        **Purpose:** Verify API authentication and check admin privileges.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=user_info"
        ```
        
        **Example Response:**
        ```json
        {
          "status": "STATUS_SUCCESS",
          "data": {
            "id": "1",
            "username": "admin",
            "member_group_id": "1",
            "email": "admin@example.com",
            "date_registered": "1609459200",
            "last_login": "1734048000",
            "status": "1"
          }
        }
        ```
        
        ---
        
        **Use Cases:**
        - ✅ Test API authentication
        - ✅ Verify admin access
        - ✅ Get current user details
        - ✅ Check account status
      operationId: getUserInfo
      tags:
        - Authentication
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          description: Action to perform
          schema:
            type: string
            enum: [user_info]
          example: user_info
      responses:
        '200':
          description: Current user information retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/UserInfo'
              example:
                status: "STATUS_SUCCESS"
                data:
                  id: "1"
                  username: "admin"
                  member_group_id: "1"
                  email: "admin@example.com"
                  date_registered: "1609459200"
                  last_login: "1734048000"
                  status: "1"
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=activity_logs:
    get:
      summary: Get Activity Logs
      description: |
        Retrieves activity logs showing admin and user actions in the panel.
        
        **Purpose:** Monitor all administrative actions and changes.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=activity_logs"
        ```
        
        **Use Cases:**
        - ✅ Audit admin actions
        - ✅ Track changes to configurations
        - ✅ Monitor user behavior
        - ✅ Security auditing
        - ✅ Troubleshooting issues
      operationId: activityLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [activity_logs]
        - name: limit
          in: query
          description: Number of records to return
          schema:
            type: integer
            default: 100
          example: 50
        - name: offset
          in: query
          description: Offset for pagination
          schema:
            type: integer
            default: 0
          example: 0
      responses:
        '200':
          description: Activity logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=live_connections:
    get:
      summary: Get Live Connections
      description: |
        Retrieves list of currently active connections to your streams.
        
        **Purpose:** Monitor real-time viewer activity.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=live_connections"
        ```
        
        **Use Cases:**
        - ✅ Monitor active viewers
        - ✅ Track concurrent connections
        - ✅ Detect connection sharing
        - ✅ View viewer locations
        - ✅ Check stream load
      operationId: liveConnections
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [live_connections]
      responses:
        '200':
          description: Live connections retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=credit_logs:
    get:
      summary: Get Credit Transaction Logs
      description: |
        Retrieves credit transaction history for resellers.
        
        **Purpose:** Track credit additions, deductions, and transfers.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=credit_logs"
        ```
        
        **Use Cases:**
        - ✅ Audit credit transactions
        - ✅ Track reseller spending
        - ✅ Monitor credit transfers
        - ✅ Financial reporting
      operationId: creditLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [credit_logs]
        - name: user_id
          in: query
          description: Filter by specific user ID
          schema:
            type: integer
          example: 123
      responses:
        '200':
          description: Credit logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=client_logs:
    get:
      summary: Get Client Connection Logs
      description: |
        Retrieves client connection attempt logs.
        
        **Purpose:** Monitor client connection history and patterns.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=client_logs"
        ```
        
        **Use Cases:**
        - ✅ Track connection attempts
        - ✅ Detect suspicious activity
        - ✅ Monitor client devices
        - ✅ View connection history
      operationId: clientLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [client_logs]
        - name: id
          in: query
          description: Filter by specific line ID
          schema:
            type: integer
          example: 123
      responses:
        '200':
          description: Client logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=user_logs:
    get:
      summary: Get User Activity Logs
      description: |
        Retrieves logs of user actions in the panel.
        
        **Purpose:** Monitor user activity and changes.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=user_logs"
        ```
        
        **Use Cases:**
        - ✅ Track user actions
        - ✅ Audit panel changes
        - ✅ Monitor reseller activity
        - ✅ Security monitoring
      operationId: userLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [user_logs]
        - name: user_id
          in: query
          description: Filter by specific user ID
          schema:
            type: integer
          example: 123
      responses:
        '200':
          description: User logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=stream_errors:
    get:
      summary: Get Stream Error Logs
      description: |
        Retrieves stream error logs and failure information.
        
        **Purpose:** Monitor stream health and troubleshoot issues.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=stream_errors"
        ```
        
        **Use Cases:**
        - ✅ Troubleshoot stream issues
        - ✅ Monitor stream reliability
        - ✅ Identify problematic sources
        - ✅ Track downtime
      operationId: streamErrors
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [stream_errors]
        - name: stream_id
          in: query
          description: Filter by specific stream ID
          schema:
            type: integer
          example: 456
      responses:
        '200':
          description: Stream errors retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=watch_output:
    get:
      summary: Watch Stream Output
      description: |
        Monitor live stream output and encoding details.
        
        **Purpose:** Real-time stream monitoring and diagnostics.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=watch_output&stream_id=456"
        ```
        
        **Use Cases:**
        - ✅ Monitor encoding quality
        - ✅ Check bitrate and resolution
        - ✅ Diagnose playback issues
        - ✅ Verify stream settings
      operationId: watchOutput
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [watch_output]
        - name: stream_id
          in: query
          required: true
          description: Stream ID to monitor
          schema:
            type: integer
          example: 456
      responses:
        '200':
          description: Stream output data retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=system_logs:
    get:
      summary: Get System Logs
      description: |
        Retrieves system-level logs and events.
        
        **Purpose:** Monitor system health and errors.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=system_logs"
        ```
        
        **Use Cases:**
        - ✅ Monitor system health
        - ✅ Troubleshoot errors
        - ✅ Track system events
        - ✅ Performance monitoring
      operationId: systemLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [system_logs]
        - name: limit
          in: query
          description: Number of records to return
          schema:
            type: integer
            default: 100
          example: 50
      responses:
        '200':
          description: System logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=login_logs:
    get:
      summary: Get Login Attempt Logs
      description: |
        Retrieves logs of login attempts to the panel.
        
        **Purpose:** Security monitoring and access auditing.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=login_logs"
        ```
        
        **Use Cases:**
        - ✅ Monitor login attempts
        - ✅ Detect brute force attacks
        - ✅ Track successful logins
        - ✅ Security auditing
      operationId: loginLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [login_logs]
        - name: success
          in: query
          description: Filter by success status (1 = successful, 0 = failed)
          schema:
            type: integer
            enum: [0, 1]
          example: 0
      responses:
        '200':
          description: Login logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=restream_logs:
    get:
      summary: Get Restream Activity Logs
      description: |
        Retrieves logs of restreaming activity.
        
        **Purpose:** Monitor reseller restreaming operations.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=restream_logs"
        ```
        
        **Use Cases:**
        - ✅ Track restream usage
        - ✅ Monitor reseller activity
        - ✅ Audit stream distribution
        - ✅ Performance monitoring
      operationId: restreamLogs
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [restream_logs]
      responses:
        '200':
          description: Restream logs retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  /?action=mag_events:
    get:
      summary: Get MAG Device Events
      description: |
        Retrieves event logs for MAG devices.
        
        **Purpose:** Monitor MAG device activity and events.
        
        ---
        
        **Example Request:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=mag_events"
        ```
        
        **Use Cases:**
        - ✅ Track MAG device usage
        - ✅ Monitor device events
        - ✅ Troubleshoot MAG issues
        - ✅ View device activity
      operationId: magEvents
      tags:
        - Logs & Events
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [mag_events]
        - name: mag_id
          in: query
          description: Filter by specific MAG device ID
          schema:
            type: integer
          example: 202
      responses:
        '200':
          description: MAG events retrieved successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'

  # ==================================================================================
  # CATEGORY 5: USER API - User Account Management
  # ==================================================================================

  /?action=create_user:
    post:
      summary: Create New User Account
      description: |
        Create a new admin, reseller, or user account in the panel.
        
        **Member Group IDs:**
        - 1 = Admin (full access)
        - 2 = Reseller (can create lines)
        - 3 = User (customer account)
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_user" \
          -d "username=newreseller" \
          -d "password=secure123" \
          -d "email=reseller@example.com" \
          -d "member_group_id=2"
        ```
      tags: [User API]
      operationId: createUser
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_user]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [username, password]
              properties:
                username:
                  type: string
                  description: Username for login
                  example: "newreseller"
                password:
                  type: string
                  description: Account password
                  example: "secure123"
                email:
                  type: string
                  format: email
                  description: Email address
                  example: "reseller@example.com"
                member_group_id:
                  type: integer
                  description: "User type: 1=Admin, 2=Reseller, 3=User"
                  enum: [1, 2, 3]
                  default: 3
                  example: 2
                max_connections:
                  type: integer
                  description: Maximum concurrent connections
                  example: 1
                notes:
                  type: string
                  description: Admin notes
                  example: "Premium reseller"
                credits:
                  type: integer
                  description: Initial credits (for resellers)
                  default: 0
                  example: 100
                reseller_dns:
                  type: string
                  description: Custom DNS for reseller panel
                  example: "panel.reseller.com"
                owner_id:
                  type: integer
                  description: Parent reseller ID (for sub-resellers)
                  example: 1
                hue:
                  type: string
                  description: UI color theme hue
                  example: "210"
                theme:
                  type: string
                  description: Theme ID
                  enum: ["0", "1", "2"]
                  default: "0"
                  example: "0"
                timezone:
                  type: string
                  description: User timezone
                  example: "Europe/Istanbul"
      responses:
        '200':
          description: User created successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: string
                          username:
                            type: string
                          email:
                            type: string
                          member_group_id:
                            type: string
                          credits:
                            type: string
                          status:
                            type: string
                          reseller_dns:
                            type: string
                            nullable: true
                          owner_id:
                            type: string
                          hue:
                            type: string
                          theme:
                            type: string
                          timezone:
                            type: string
                        example:
                          id: "5"
                          username: "newreseller"
                          email: "reseller@example.com"
                          member_group_id: "2"
                          credits: "100"
                          status: "1"
                          reseller_dns: null
                          owner_id: "1"
                          hue: ""
                          theme: "0"
                          timezone: ""

  /?action=edit_user:
    post:
      summary: Edit User Account
      description: |
        Modify user account settings.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_user" \
          -d "id=5" \
          -d "password=newsecure456" \
          -d "email=newemail@example.com"
        ```
      tags: [User API]
      operationId: editUser
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_user]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: User ID to edit
                  example: 5
                username:
                  type: string
                  description: New username
                  example: "updateduser"
                password:
                  type: string
                  description: New password
                  example: "newsecure456"
                email:
                  type: string
                  format: email
                  description: New email
                  example: "newemail@example.com"
                member_group_id:
                  type: integer
                  description: New user type
                  enum: [1, 2, 3]
                  example: 2
                max_connections:
                  type: integer
                  description: New connection limit
                  example: 2
                notes:
                  type: string
                  description: Updated notes
                  example: "VIP reseller"
      responses:
        '200':
          description: User updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_user:
    post:
      summary: Delete User Account
      description: |
        Permanently remove a user account from the panel.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_user" \
          -d "id=5"
        ```
      tags: [User API]
      operationId: deleteUser
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_user]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: User ID to delete
                  example: 5
      responses:
        '200':
          description: User deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_user:
    post:
      summary: Enable User Account
      description: |
        Activate a disabled user account.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=enable_user" \
          -d "id=5"
        ```
      tags: [User API]
      operationId: enableUser
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_user]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: User ID to enable
                  example: 5
      responses:
        '200':
          description: User enabled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_user:
    post:
      summary: Disable User Account
      description: |
        Deactivate a user account without deleting it.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=disable_user" \
          -d "id=5"
        ```
      tags: [User API]
      operationId: disableUser
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_user]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: User ID to disable
                  example: 5
      responses:
        '200':
          description: User disabled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=add_credits:
    post:
      summary: Add Credits to Reseller
      description: |
        Add credits to a reseller account for creating lines.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=add_credits" \
          -d "user_id=5" \
          -d "amount=100.00"
        ```
      tags: [User API]
      operationId: addCredits
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [add_credits]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [user_id, amount]
              properties:
                user_id:
                  type: integer
                  description: Reseller user ID
                  example: 5
                amount:
                  type: number
                  format: float
                  description: Credits amount to add
                  example: 100.00
                  minimum: 0
      responses:
        '200':
          description: Credits added successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          new_balance:
                            type: number
                            description: Updated credit balance


  # ==================================================================================

  # ==================================================================================
  # CATEGORY 5.5: LINE API - M3U Subscription Management
  # ==================================================================================

  /?action=get_line:
    get:
      summary: Get Line Details
      description: |
        Retrieve detailed information about a specific M3U subscription line.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_line&id=123"
        ```
      tags: [Line API]
      operationId: getLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_line]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          description: Line ID
          example: 123
      responses:
        '200':
          description: Line details retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: string
                          member_id:
                            type: string
                          username:
                            type: string
                          password:
                            type: string
                          last_ip:
                            type: string
                          exp_date:
                            type: string
                            nullable: true
                          admin_enabled:
                            type: string
                          enabled:
                            type: string
                          admin_notes:
                            type: string
                            nullable: true
                          reseller_notes:
                            type: string
                            nullable: true
                          bouquet:
                            type: string
                            description: JSON array string of bouquet IDs
                          allowed_outputs:
                            type: string
                            description: JSON array string of allowed outputs
                          max_connections:
                            type: string
                          is_restreamer:
                            type: string
                          is_trial:
                            type: string
                          is_mag:
                            type: string
                          is_e2:
                            type: string
                          is_stalker:
                            type: string
                          is_isplock:
                            type: string
                          allowed_ips:
                            type: string
                            description: JSON array string
                          allowed_ua:
                            type: string
                            description: JSON array string
                          created_at:
                            type: string
                          pair_id:
                            type: string
                            nullable: true
                          force_server_id:
                            type: string
                          as_number:
                            type: string
                          isp_desc:
                            type: string
                          forced_country:
                            type: string
                            nullable: true
                          bypass_ua:
                            type: string
                          play_token:
                            type: string
                            nullable: true
                          last_expiration_video:
                            type: string
                            nullable: true
                          package_id:
                            type: string
                            nullable: true
                          access_token:
                            type: string
                            nullable: true
                          contact:
                            type: string
                            nullable: true
                          last_activity:
                            type: string
                          last_activity_array:
                            type: string
                            description: JSON object string
                          updated:
                            type: string
                        example:
                          id: "1"
                          member_id: "1"
                          username: "jhgsdf22"
                          password: "EfuBzGCmeg"
                          last_ip: "109.236.80.64"
                          exp_date: null
                          admin_enabled: "1"
                          enabled: "1"
                          admin_notes: null
                          reseller_notes: "WOI User: jhgsdf22\nSkyFull - 250 Euro/month\nAdult - 180 Euro/month\n\n430 Euro/month"
                          bouquet: "[1,2,3,4]"
                          allowed_outputs: "[1,2,3]"
                          max_connections: "180"
                          is_restreamer: "1"
                          is_trial: "0"
                          is_mag: "0"
                          is_e2: "0"
                          is_stalker: "0"
                          is_isplock: "0"
                          allowed_ips: "[]"
                          allowed_ua: "[]"
                          created_at: "1756987580"
                          pair_id: null
                          force_server_id: "0"
                          as_number: "49981"
                          isp_desc: "WorldStream B.V."
                          forced_country: null
                          bypass_ua: "0"
                          play_token: null
                          last_expiration_video: null
                          package_id: null
                          access_token: null
                          contact: null
                          last_activity: "469833"
                          last_activity_array: "{\"date_end\":1765801621,\"stream_id\":204}"
                          updated: "2025-12-15 13:28:01"

  /?action=get_lines:
    get:
      summary: Get All Lines
      description: |
        Retrieve a list of all M3U subscription lines.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_lines"
        ```
      tags: [Line API]
      operationId: getLines
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_lines]
      responses:
        '200':
          description: List of lines retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            member_id:
                              type: string
                            last_activity:
                              type: string
                              nullable: true
                            last_activity_array:
                              type: string
                              nullable: true
                              description: JSON object string with last activity details
                            username:
                              type: string
                            password:
                              type: string
                            exp_date:
                              type: string
                              nullable: true
                            admin_enabled:
                              type: string
                            is_restreamer:
                              type: string
                            enabled:
                              type: string
                            admin_notes:
                              type: string
                              nullable: true
                            reseller_notes:
                              type: string
                              nullable: true
                            max_connections:
                              type: string
                            is_trial:
                              type: string
                            active_connections:
                              type: integer
                            owner_name:
                              type: string
                            stream_display_name:
                              type: string
                              nullable: true
                            stream_id:
                              type: integer
                              nullable: true
                            last_active:
                              type: integer
                              nullable: true
                      recordsTotal:
                        type: string
                        description: Total number of records
                      recordsFiltered:
                        type: string
                        description: Number of filtered records
                    example:
                      status: "STATUS_SUCCESS"
                      data:
                        - id: "1"
                          member_id: "1"
                          last_activity: "469856"
                          last_activity_array: "{\"date_end\":1765802281,\"stream_id\":206}"
                          username: "jhgsdf22"
                          password: "EfuBzGCmeg"
                          exp_date: null
                          admin_enabled: "1"
                          is_restreamer: "1"
                          enabled: "1"
                          admin_notes: null
                          reseller_notes: "WOI User: jhgsdf22\nSkyFull - 250 Euro/month\nAdult - 180 Euro/month\n\n430 Euro/month"
                          max_connections: "180"
                          is_trial: "0"
                          active_connections: 0
                          owner_name: "redhat@woi"
                          stream_display_name: null
                          stream_id: 206
                          last_active: 1765802281
                        - id: "8"
                          member_id: "1"
                          last_activity: null
                          last_activity_array: null
                          username: "test"
                          password: "helloworld"
                          exp_date: null
                          admin_enabled: "1"
                          is_restreamer: "0"
                          enabled: "1"
                          admin_notes: null
                          reseller_notes: null
                          max_connections: "1"
                          is_trial: "0"
                          active_connections: 0
                          owner_name: "redhat@woi"
                          stream_display_name: null
                          stream_id: null
                          last_active: null
                      recordsTotal: "4"
                      recordsFiltered: "4"

  /?action=create_line:
    post:
      summary: Create M3U Line
      description: |
        Create a new M3U subscription line for a customer.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_line" \
          -d "username=customer123" \
          -d "password=pass123" \
          -d "exp_date=2025-12-31" \
          -d "max_connections=1" \
          -d "bouquets_selected[]=1"
        ```
      tags: [Line API]
      operationId: createLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [username, password]
              properties:
                username:
                  type: string
                  description: M3U username
                  example: "customer123"
                password:
                  type: string
                  description: M3U password
                  example: "pass123"
                exp_date:
                  type: string
                  description: Expiration date (YYYY-MM-DD)
                  example: "2025-12-31"
                max_connections:
                  type: integer
                  description: Maximum concurrent connections
                  default: 1
                  example: 1
                bouquets_selected:
                  type: array
                  description: Array of bouquet/package IDs
                  items:
                    type: integer
                  example: [1, 2]
                admin_notes:
                  type: string
                  description: Admin notes
                  example: "Premium customer"
                is_trial:
                  type: integer
                  description: Trial account flag (0 or 1)
                  enum: [0, 1]
                  example: 0
                allowed_ips:
                  type: string
                  description: Comma-separated list of allowed IPs
                  example: "192.168.1.100,10.0.0.1"
                member_id:
                  type: integer
                  description: Owner/Reseller ID (defaults to current user)
                  example: 1
                is_restreamer:
                  type: integer
                  description: Restreamer flag (0 or 1)
                  enum: [0, 1]
                  default: 0
                  example: 0
                reseller_notes:
                  type: string
                  description: Reseller notes (visible to reseller)
                  example: "VIP Package - 50 EUR/month"
                enabled:
                  type: integer
                  description: Enable/disable line (0 or 1)
                  enum: [0, 1]
                  default: 1
                  example: 1
                forced_country:
                  type: string
                  description: Force country code (e.g., US, UK, DE)
                  example: "US"
                allowed_outputs:
                  type: string
                  description: Allowed output formats (JSON array string)
                  example: "[1,2,3]"
                is_mag:
                  type: integer
                  description: MAG device flag (0 or 1)
                  enum: [0, 1]
                  default: 0
                is_e2:
                  type: integer
                  description: Enigma2 device flag (0 or 1)
                  enum: [0, 1]
                  default: 0
                is_stalker:
                  type: integer
                  description: Stalker portal flag (0 or 1)
                  enum: [0, 1]
                  default: 0
                is_isplock:
                  type: integer
                  description: ISP lock flag (0 or 1)
                  enum: [0, 1]
                  default: 0
                allowed_ua:
                  type: string
                  description: Allowed user agents (JSON array string)
                  example: "[]"
                pair_id:
                  type: integer
                  description: Paired device ID
                  nullable: true
                force_server_id:
                  type: integer
                  description: Force specific server ID
                  default: 0
                bypass_ua:
                  type: integer
                  description: Bypass user agent check (0 or 1)
                  enum: [0, 1]
                  default: 0
                play_token:
                  type: string
                  description: Custom play token
                  nullable: true
                package_id:
                  type: integer
                  description: Package/bouquet ID
                  nullable: true
                access_token:
                  type: string
                  description: Access token for authentication
                  nullable: true
                contact:
                  type: string
                  description: Contact information
                  nullable: true
      responses:
        '200':
          description: Line created successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: string
                          username:
                            type: string
                          password:
                            type: string
                          exp_date:
                            type: string
                            nullable: true
                          max_connections:
                            type: string
                          is_trial:
                            type: string
                          member_id:
                            type: string
                          is_restreamer:
                            type: string
                          enabled:
                            type: string
                          admin_enabled:
                            type: string
                          admin_notes:
                            type: string
                            nullable: true
                          reseller_notes:
                            type: string
                            nullable: true
                        example:
                          id: "8"
                          username: "customer123"
                          password: "pass123"
                          exp_date: "2025-12-31"
                          max_connections: "1"
                          is_trial: "0"
                          member_id: "1"
                          is_restreamer: "0"
                          enabled: "1"
                          admin_enabled: "1"
                          admin_notes: null
                          reseller_notes: null

  /?action=edit_line:
    post:
      summary: Edit M3U Line
      description: |
        Modify an existing M3U subscription line.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_line" \
          -d "id=123" \
          -d "exp_date=2026-06-30" \
          -d "max_connections=2"
        ```
      tags: [Line API]
      operationId: editLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Line ID to edit
                  example: 123
                username:
                  type: string
                  description: New username
                  example: "customer123_updated"
                password:
                  type: string
                  description: New password
                  example: "newpass456"
                exp_date:
                  type: string
                  description: New expiration date
                  example: "2026-06-30"
                max_connections:
                  type: integer
                  description: New connection limit
                  example: 2
                bouquets_selected:
                  type: array
                  items:
                    type: integer
                  example: [1, 2, 3]
                admin_notes:
                  type: string
                  example: "VIP customer"
                allowed_ips:
                  type: string
                  example: "192.168.1.100"
      responses:
        '200':
          description: Line updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_line:
    post:
      summary: Delete M3U Line
      description: |
        Permanently remove an M3U subscription line.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_line" \
          -d "id=123"
        ```
      tags: [Line API]
      operationId: deleteLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Line ID to delete
                  example: 123
      responses:
        '200':
          description: Line deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_line:
    post:
      summary: Enable M3U Line
      description: Activate a disabled line
      tags: [Line API]
      operationId: enableLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 123
      responses:
        '200':
          description: Line enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_line:
    post:
      summary: Disable M3U Line
      description: Deactivate a line without deleting it
      tags: [Line API]
      operationId: disableLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 123
      responses:
        '200':
          description: Line disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=ban_line:
    post:
      summary: Ban M3U Line
      description: Ban a line from service
      tags: [Line API]
      operationId: banLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [ban_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 123
      responses:
        '200':
          description: Line banned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=unban_line:
    post:
      summary: Unban M3U Line
      description: Remove ban from a line
      tags: [Line API]
      operationId: unbanLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [unban_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 123
      responses:
        '200':
          description: Line unbanned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  # ==================================================================================
  # CATEGORY 6: MAG API - MAG Device Management
  # ==================================================================================

  /?action=create_mag:
    post:
      summary: Create MAG Device
      description: |
        Register a new MAG device (Set-Top Box) subscription.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_mag" \
          -d "mac=00:1A:79:12:34:56" \
          -d "exp_date=2025-12-31" \
          -d "bouquets_selected[]=1"
        ```
      tags: [MAG API]
      operationId: createMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [mac]
              properties:
                mac:
                  type: string
                  description: MAC address of the MAG device (format XX:XX:XX:XX:XX:XX)
                  example: "00:1A:79:12:34:56"
                  pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'
                exp_date:
                  type: string
                  description: Expiration date (YYYY-MM-DD or Unix timestamp)
                  example: "2025-12-31"
                bouquets_selected:
                  type: array
                  description: Array of package/bouquet IDs to assign
                  items:
                    type: integer
                  example: [1, 2, 3]
                notes:
                  type: string
                  description: Admin notes about this device
                  example: "Customer MAG322"
                is_trial:
                  type: integer
                  description: Trial status (0=No, 1=Yes)
                  enum: [0, 1]
                  default: 0
      responses:
        '200':
          description: MAG device created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_mag:
    post:
      summary: Edit MAG Device
      description: |
        Modify settings for an existing MAG device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_mag" \
          -d "id=202" \
          -d "exp_date=2026-12-31"
        ```
      tags: [MAG API]
      operationId: editMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID
                  example: 202
                mac:
                  type: string
                  description: New MAC address
                  example: "00:1A:79:98:76:54"
                exp_date:
                  type: string
                  description: New expiration date
                  example: "2026-12-31"
                bouquets_selected:
                  type: array
                  description: Update assigned packages
                  items:
                    type: integer
                  example: [1, 3]
                notes:
                  type: string
                  description: Update notes
                  example: "Renewed subscription"
      responses:
        '200':
          description: MAG device updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_mag:
    post:
      summary: Delete MAG Device
      description: |
        Remove a MAG device from the system.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_mag" \
          -d "id=202"
        ```
      tags: [MAG API]
      operationId: deleteMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID to delete
                  example: 202
      responses:
        '200':
          description: MAG device deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_mag:
    post:
      summary: Enable MAG Device
      description: |
        Activate a MAG device to allow streaming.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=enable_mag" \
          -d "id=202"
        ```
      tags: [MAG API]
      operationId: enableMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID to enable
                  example: 202
      responses:
        '200':
          description: MAG device enabled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_mag:
    post:
      summary: Disable MAG Device
      description: |
        Deactivate a MAG device to prevent streaming.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=disable_mag" \
          -d "id=202"
        ```
      tags: [MAG API]
      operationId: disableMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID to disable
                  example: 202
      responses:
        '200':
          description: MAG device disabled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=ban_mag:
    post:
      summary: Ban MAG Device
      description: |
        Ban a MAG device from accessing the service.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=ban_mag" \
          -d "id=202"
        ```
      tags: [MAG API]
      operationId: banMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [ban_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID to ban
                  example: 202
      responses:
        '200':
          description: MAG device banned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=unban_mag:
    post:
      summary: Unban MAG Device
      description: |
        Remove ban from a MAG device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=unban_mag" \
          -d "id=202"
        ```
      tags: [MAG API]
      operationId: unbanMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [unban_mag]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID to unban
                  example: 202
      responses:
        '200':
          description: MAG device unbanned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=convert_mag_to_line:
    post:
      summary: Convert MAG to Line
      description: |
        Convert a MAG device subscription to an M3U/Xtream Codes line.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=convert_mag_to_line" \
          -d "id=202"
        ```
      tags: [MAG API]
      operationId: convertMagToLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [convert_mag_to_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: MAG device ID to convert
                  example: 202
      responses:
        '200':
          description: MAG device converted to line successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                            description: New line ID
                          username:
                            type: string
                            description: Generated username
                          password:
                            type: string
                            description: Generated password

  /?action=get_mag:
    get:
      summary: Get MAG Device Details
      description: |
        Retrieve detailed information about a specific MAG device.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_mag&id=202"
        ```
      tags: [MAG API]
      operationId: getMag
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_mag]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          description: MAG device ID
          example: 202
      responses:
        '200':
          description: MAG device details retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                          mac:
                            type: string
                          exp_date:
                            type: string
                          status:
                            type: string
                          bouquets:
                            type: array
                            items:
                              type: integer

  /?action=get_mags:
    get:
      summary: Get All MAG Devices
      description: |
        Retrieve a list of all MAG devices in the system.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_mags"
        ```
      tags: [MAG API]
      operationId: getMags
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_mags]
      responses:
        '200':
          description: List of MAG devices retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          type: object


  # ==================================================================================
  # CATEGORY 7: ENIGMA API - Enigma2 Device Management
  # ==================================================================================

  /?action=create_enigma:
    post:
      summary: Create Enigma2 Device
      description: |
        Register a new Enigma2 STB (Set-Top Box) device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_enigma" \
          -d "mac=00:1A:79:AA:BB:CC" \
          -d "exp_date=2025-12-31" \
          -d "bouquets_selected[]=1"
        ```
      tags: [Enigma API]
      operationId: createEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [mac]
              properties:
                mac:
                  type: string
                  description: MAC address of Enigma2 device
                  example: "00:1A:79:AA:BB:CC"
                  pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'
                exp_date:
                  type: string
                  description: Expiration date
                  example: "2025-12-31"
                bouquets_selected:
                  type: array
                  description: Package IDs
                  items:
                    type: integer
                  example: [1, 2]
                notes:
                  type: string
                  description: Admin notes
                  example: "Customer Enigma2 box"
      responses:
        '200':
          description: Enigma2 device created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_enigma:
    post:
      summary: Edit Enigma2 Device
      description: |
        Modify Enigma2 device settings.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_enigma" \
          -d "id=303" \
          -d "exp_date=2026-06-30"
        ```
      tags: [Enigma API]
      operationId: editEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
                mac:
                  type: string
                  description: New MAC address
                  example: "00:1A:79:DD:EE:FF"
                exp_date:
                  type: string
                  description: New expiration date
                  example: "2026-06-30"
                bouquets_selected:
                  type: array
                  items:
                    type: integer
                  example: [2, 3]
      responses:
        '200':
          description: Enigma2 device updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_enigma:
    post:
      summary: Delete Enigma2 Device
      description: |
        Remove an Enigma2 device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_enigma" \
          -d "id=303"
        ```
      tags: [Enigma API]
      operationId: deleteEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
      responses:
        '200':
          description: Enigma2 device deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_enigma:
    post:
      summary: Enable Enigma2 Device
      description: |
        Activate an Enigma2 device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=enable_enigma" \
          -d "id=303"
        ```
      tags: [Enigma API]
      operationId: enableEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
      responses:
        '200':
          description: Enigma2 device enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_enigma:
    post:
      summary: Disable Enigma2 Device
      description: |
        Deactivate an Enigma2 device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=disable_enigma" \
          -d "id=303"
        ```
      tags: [Enigma API]
      operationId: disableEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
      responses:
        '200':
          description: Enigma2 device disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=ban_enigma:
    post:
      summary: Ban Enigma2 Device
      description: |
        Ban an Enigma2 device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=ban_enigma" \
          -d "id=303"
        ```
      tags: [Enigma API]
      operationId: banEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [ban_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
      responses:
        '200':
          description: Enigma2 device banned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=unban_enigma:
    post:
      summary: Unban Enigma2 Device
      description: |
        Remove ban from Enigma2 device.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=unban_enigma" \
          -d "id=303"
        ```
      tags: [Enigma API]
      operationId: unbanEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [unban_enigma]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
      responses:
        '200':
          description: Enigma2 device unbanned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=convert_enigma_to_line:
    post:
      summary: Convert Enigma to Line
      description: |
        Convert Enigma2 device to M3U line.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=convert_enigma_to_line" \
          -d "id=303"
        ```
      tags: [Enigma API]
      operationId: convertEnigmaToLine
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [convert_enigma_to_line]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Enigma2 device ID
                  example: 303
      responses:
        '200':
          description: Converted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_enigma:
    get:
      summary: Get Enigma2 Details
      description: |
        Retrieve Enigma2 device information.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_enigma&id=303"
        ```
      tags: [Enigma API]
      operationId: getEnigma
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_enigma]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          description: Enigma2 device ID
          example: 303
      responses:
        '200':
          description: Enigma2 details retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                          mac:
                            type: string
                          exp_date:
                            type: string
                          status:
                            type: string


  # ==================================================================================
  # CATEGORY 8-15: CONTENT & SYSTEM MANAGEMENT (Compact format)
  # ==================================================================================

  # Streams API
  /?action=create_stream:
    post:
      summary: Create Live Stream
      description: |
        Add a new live TV stream to your panel.
        
        **Validation:** Requires ONE OF:
        - `stream_display_name` - For manual stream entry
        - `review=1` - For review/preview mode
        - M3U file upload - For bulk import
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_stream" \
          -d "stream_display_name=CNN HD" \
          -d "stream_source=http://source.com/stream.m3u8" \
          -d "category_id=1"
        ```
      tags: [Streams API]
      operationId: createStream
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_stream]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                stream_display_name:
                  type: string
                  description: Display name for the stream (required unless review=1 or uploading M3U)
                  example: "CNN HD"
                stream_source:
                  type: string
                  description: Stream URL source
                  example: "http://source.com/stream.m3u8"
                category_id:
                  type: integer
                  description: Category ID for organization
                  example: 1
                stream_icon:
                  type: string
                  description: URL to stream logo/icon
                  example: "http://example.com/cnn.png"
                notes:
                  type: string
                  description: Admin notes
                  example: "Main news channel"
                review:
                  type: integer
                  description: Review mode flag (0 or 1)
                  enum: [0, 1]
                  example: 0
                direct_source:
                  type: integer
                  description: Use direct source without transcoding (0 or 1)
                  enum: [0, 1]
                  example: 1
                tv_archive:
                  type: integer
                  description: Enable TV archive/catchup (0 or 1)
                  enum: [0, 1]
                  example: 0
                tv_archive_duration:
                  type: integer
                  description: Archive duration in days
                  example: 7
      responses:
        '200':
          description: Stream created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_stream:
    post:
      summary: Edit Live Stream
      description: |
        Modify an existing live stream.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_stream" \
          -d "id=456" \
          -d "stream_display_name=CNN HD Updated"
        ```
      tags: [Streams API]
      operationId: editStream
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_stream]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Stream ID to edit
                  example: 456
                stream_display_name:
                  type: string
                  description: New display name
                  example: "CNN HD Updated"
                stream_source:
                  type: string
                  description: New stream URL
                  example: "http://newsource.com/stream.m3u8"
                category_id:
                  type: integer
                  description: New category ID
                  example: 2
                stream_icon:
                  type: string
                  description: New icon URL
                  example: "http://example.com/cnn_new.png"
      responses:
        '200':
          description: Stream updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_stream:
    post:
      summary: Delete Live Stream
      description: |
        Remove a live stream from your panel.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_stream" \
          -d "id=456"
        ```
      tags: [Streams API]
      operationId: deleteStream
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_stream]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Stream ID to delete
                  example: 456
      responses:
        '200':
          description: Stream deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=start_stream:
    post:
      summary: Start Stream
      description: |
        Start streaming for a specific stream.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=start_stream" \
          -d "id=456"
        ```
      tags: [Streams API]
      operationId: startStream
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [start_stream]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Stream ID to start
                  example: 456
      responses:
        '200':
          description: Stream started successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=stop_stream:
    post:
      summary: Stop Stream
      description: |
        Stop streaming for a specific stream.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=stop_stream" \
          -d "id=456"
        ```
      tags: [Streams API]
      operationId: stopStream
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [stop_stream]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Stream ID to stop
                  example: 456
      responses:
        '200':
          description: Stream stopped successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_stream:
    get:
      summary: Get Stream Details
      description: |
        Retrieve detailed information about a specific stream.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_stream&id=456"
        ```
      tags: [Streams API]
      operationId: getStream
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_stream]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          description: Stream ID
          example: 456
      responses:
        '200':
          description: Stream details retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          id:
                            type: integer
                          stream_display_name:
                            type: string
                          stream_source:
                            type: string
                          category_id:
                            type: integer


  # Channel API
  /?action=create_channel:
    post:
      summary: Create Channel
      description: |
        Add a new TV channel category or group.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_channel" \
          -d "category_name=Sports Channels" \
          -d "parent_id=0"
        ```
      tags: [Channel API]
      operationId: createChannel
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_channel]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [category_name]
              properties:
                category_name:
                  type: string
                  description: Channel category name
                  example: "Sports Channels"
                parent_id:
                  type: integer
                  description: Parent category ID (0 for root)
                  default: 0
                  example: 0
      responses:
        '200':
          description: Channel created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_channel:
    post:
      summary: Edit Channel
      description: |
        Modify channel category settings.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_channel" \
          -d "id=5" \
          -d "category_name=Premium Sports"
        ```
      tags: [Channel API]
      operationId: editChannel
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_channel]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Channel ID
                  example: 5
                category_name:
                  type: string
                  description: New category name
                  example: "Premium Sports"
                parent_id:
                  type: integer
                  description: New parent category
                  example: 1
      responses:
        '200':
          description: Channel updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_channel:
    post:
      summary: Delete Channel
      description: |
        Remove a channel category.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_channel" \
          -d "id=5"
        ```
      tags: [Channel API]
      operationId: deleteChannel
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_channel]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Channel ID
                  example: 5
      responses:
        '200':
          description: Channel deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_channel:
    post:
      summary: Enable Channel
      description: Activate a channel category
      tags: [Channel API]
      operationId: enableChannel
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_channel]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 5
      responses:
        '200':
          description: Channel enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_channel:
    post:
      summary: Disable Channel
      description: Deactivate a channel category
      tags: [Channel API]
      operationId: disableChannel
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_channel]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 5
      responses:
        '200':
          description: Channel disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_channel:
    get:
      summary: Get Channel Details
      description: Retrieve channel category information
      tags: [Channel API]
      operationId: getChannel
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_channel]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          example: 5
      responses:
        '200':
          description: Channel details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  # Station API
  /?action=create_station:
    post:
      summary: Create Radio Station
      description: |
        Add a new radio station to your panel.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_station" \
          -d "name=Rock FM 101.5" \
          -d "stream_url=http://stream.rockfm.com/live" \
          -d "category_id=3"
        ```
      tags: [Station API]
      operationId: createStation
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_station]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [name, stream_url]
              properties:
                name:
                  type: string
                  description: Radio station name
                  example: "Rock FM 101.5"
                stream_url:
                  type: string
                  description: Stream URL
                  example: "http://stream.rockfm.com/live"
                category_id:
                  type: integer
                  description: Category ID
                  example: 3
                icon:
                  type: string
                  description: Station logo URL
                  example: "http://example.com/rockfm.png"
      responses:
        '200':
          description: Station created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_station:
    post:
      summary: Edit Radio Station
      description: Modify radio station settings
      tags: [Station API]
      operationId: editStation
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_station]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 10
                name:
                  type: string
                  example: "Rock FM Updated"
                stream_url:
                  type: string
                  example: "http://newstream.rockfm.com/live"
      responses:
        '200':
          description: Station updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_station:
    post:
      summary: Delete Radio Station
      description: Remove a radio station
      tags: [Station API]
      operationId: deleteStation
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_station]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 10
      responses:
        '200':
          description: Station deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_station:
    post:
      summary: Enable Radio Station
      description: Activate a radio station
      tags: [Station API]
      operationId: enableStation
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_station]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 10
      responses:
        '200':
          description: Station enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_station:
    post:
      summary: Disable Radio Station
      description: Deactivate a radio station
      tags: [Station API]
      operationId: disableStation
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_station]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 10
      responses:
        '200':
          description: Station disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_station:
    get:
      summary: Get Radio Station Details
      description: Retrieve radio station information
      tags: [Station API]
      operationId: getStation
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_station]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          example: 10
      responses:
        '200':
          description: Station details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  # Movie API
  /?action=create_movie:
    post:
      summary: Create VOD Movie
      description: |
        Add a new VOD movie to your library.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_movie" \
          -d "name=Inception" \
          -d "stream_url=http://cdn.example.com/inception.mp4" \
          -d "category_id=1" \
          -d "tmdb_id=27205"
        ```
      tags: [Movie API]
      operationId: createMovie
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_movie]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [name, stream_url]
              properties:
                name:
                  type: string
                  description: Movie title
                  example: "Inception"
                stream_url:
                  type: string
                  description: VOD file URL
                  example: "http://cdn.example.com/inception.mp4"
                category_id:
                  type: integer
                  description: Category ID
                  example: 1
                tmdb_id:
                  type: integer
                  description: TMDB ID for metadata
                  example: 27205
                cover:
                  type: string
                  description: Cover image URL
                  example: "http://image.tmdb.org/poster.jpg"
                rating:
                  type: number
                  description: Movie rating (0-10)
                  example: 8.8
      responses:
        '200':
          description: Movie created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_movie:
    post:
      summary: Edit VOD Movie
      description: Modify movie details
      tags: [Movie API]
      operationId: editMovie
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_movie]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 100
                name:
                  type: string
                  example: "Inception (2010)"
                stream_url:
                  type: string
                  example: "http://cdn.example.com/inception_hd.mp4"
      responses:
        '200':
          description: Movie updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_movie:
    post:
      summary: Delete VOD Movie
      description: Remove a movie from library
      tags: [Movie API]
      operationId: deleteMovie
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_movie]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 100
      responses:
        '200':
          description: Movie deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_movie:
    post:
      summary: Enable VOD Movie
      description: Activate a movie
      tags: [Movie API]
      operationId: enableMovie
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_movie]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 100
      responses:
        '200':
          description: Movie enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_movie:
    post:
      summary: Disable VOD Movie
      description: Deactivate a movie
      tags: [Movie API]
      operationId: disableMovie
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_movie]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 100
      responses:
        '200':
          description: Movie disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_movie:
    get:
      summary: Get VOD Movie Details
      description: Retrieve movie information
      tags: [Movie API]
      operationId: getMovie
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_movie]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          example: 100
      responses:
        '200':
          description: Movie details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  # Series API
  /?action=create_series:
    post:
      summary: Create TV Series
      description: |
        Add a new TV series to your library.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_series" \
          -d "name=Breaking Bad" \
          -d "category_id=2" \
          -d "tmdb_id=1396"
        ```
      tags: [Series API]
      operationId: createSeries
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_series]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [name]
              properties:
                name:
                  type: string
                  description: Series name
                  example: "Breaking Bad"
                category_id:
                  type: integer
                  description: Category ID
                  example: 2
                tmdb_id:
                  type: integer
                  description: TMDB ID
                  example: 1396
                cover:
                  type: string
                  description: Cover image
                  example: "http://image.tmdb.org/series.jpg"
      responses:
        '200':
          description: Series created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_series:
    post:
      summary: Edit TV Series
      description: Modify series details
      tags: [Series API]
      operationId: editSeries
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_series]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 50
                name:
                  type: string
                  example: "Breaking Bad (Updated)"
      responses:
        '200':
          description: Series updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_series:
    post:
      summary: Delete TV Series
      description: Remove a series
      tags: [Series API]
      operationId: deleteSeries
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_series]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 50
      responses:
        '200':
          description: Series deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_series:
    get:
      summary: Get TV Series Details
      description: Retrieve series information
      tags: [Series API]
      operationId: getSeries
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_series]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          example: 50
      responses:
        '200':
          description: Series details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  # Episode API
  /?action=create_episode:
    post:
      summary: Create Episode
      description: |
        Add a new episode to a TV series.
        
        **IMPORTANT:** Parameter names are `series`, `season_num`, and `episode` (not series_id or episode_num).
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_episode" \
          -d "series=50" \
          -d "season_num=1" \
          -d "episode=1" \
          -d "title=Pilot" \
          -d "stream_source=http://cdn.example.com/bb_s01e01.mp4"
        ```
      tags: [Episode API]
      operationId: createEpisode
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_episode]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [series, season_num, episode]
              properties:
                series:
                  type: integer
                  description: Parent series ID (parameter name is 'series', not 'series_id')
                  example: 50
                season_num:
                  type: integer
                  description: Season number (must be numeric)
                  example: 1
                episode:
                  type: integer
                  description: Episode number (parameter name is 'episode', not 'episode_num')
                  example: 1
                title:
                  type: string
                  description: Episode title
                  example: "Pilot"
                stream_source:
                  type: string
                  description: Episode video URL (parameter name is 'stream_source', not 'stream_url')
                  example: "http://cdn.example.com/bb_s01e01.mp4"
                direct_source:
                  type: integer
                  description: Use direct source without transcoding (0 or 1)
                  enum: [0, 1]
                  example: 1
                transcode_profile_id:
                  type: integer
                  description: Transcode profile to use
                  example: 1
                plot:
                  type: string
                  description: Episode plot/description
                  example: "The first episode introduces the main characters."
                duration:
                  type: string
                  description: Episode duration (e.g., '00:45:00')
                  example: "00:45:00"
      responses:
        '200':
          description: Episode created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_episode:
    post:
      summary: Edit Episode
      description: Modify episode details
      tags: [Episode API]
      operationId: editEpisode
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_episode]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 200
                title:
                  type: string
                  example: "Pilot (HD)"
                stream_url:
                  type: string
                  example: "http://cdn.example.com/bb_s01e01_hd.mp4"
      responses:
        '200':
          description: Episode updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_episode:
    post:
      summary: Delete Episode
      description: Remove an episode
      tags: [Episode API]
      operationId: deleteEpisode
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_episode]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 200
      responses:
        '200':
          description: Episode deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=enable_episode:
    post:
      summary: Enable Episode
      description: Activate an episode
      tags: [Episode API]
      operationId: enableEpisode
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [enable_episode]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 200
      responses:
        '200':
          description: Episode enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=disable_episode:
    post:
      summary: Disable Episode
      description: Deactivate an episode
      tags: [Episode API]
      operationId: disableEpisode
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [disable_episode]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  example: 200
      responses:
        '200':
          description: Episode disabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_episode:
    get:
      summary: Get Episode Details
      description: Retrieve episode information
      tags: [Episode API]
      operationId: getEpisode
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_episode]
        - name: id
          in: query
          required: true
          schema:
            type: integer
          example: 200
      responses:
        '200':
          description: Episode details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  # Server API
  /?action=install_server:
    post:
      summary: Install New Server
      description: |
        Install XC_VM on a remote server via SSH. The system will automatically install
        and configure the streaming server software.
        
        **IMPORTANT:** This endpoint requires SSH access to the target server.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=install_server" \
          -d "server_name=Server USA" \
          -d "server_ip=192.168.1.50" \
          -d "ssh_port=22" \
          -d "root_username=root" \
          -d "root_password=yourpassword" \
          -d "update_sysctl=1"
        ```
        
        **Note:** The `type` parameter is automatically set to `0` for streaming servers.
        For load balancers, use the `install_proxy` action instead.
      tags: [Server API]
      operationId: installServer
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [install_server]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [ssh_port, root_password]
              properties:
                server_name:
                  type: string
                  description: Friendly name for the server (optional but recommended)
                  example: "Server USA East"
                server_ip:
                  type: string
                  description: Server IP address or domain (optional but recommended)
                  example: "192.168.1.50"
                ssh_port:
                  type: integer
                  description: SSH port number (REQUIRED)
                  default: 22
                  example: 22
                root_username:
                  type: string
                  description: SSH username for server access
                  default: "root"
                  example: "root"
                root_password:
                  type: string
                  description: SSH password for server access (REQUIRED)
                  example: "yourpassword"
                  format: password
                http_broadcast_port:
                  type: integer
                  description: HTTP port for streaming (set during installation)
                  example: 8000
                https_broadcast_port:
                  type: integer
                  description: HTTPS port for streaming (set during installation)
                  example: 8443
                update_sysctl:
                  type: integer
                  description: Update system settings during installation (0=No, 1=Yes)
                  enum: [0, 1]
                  default: 0
                  example: 1
      responses:
        '200':
          description: Server installation initiated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=install_proxy:
    post:
      summary: Install Load Balancer
      description: |
        Install a load balancer (proxy) server for distributing traffic across streaming servers.
        
        **IMPORTANT:** This endpoint requires SSH access to the target server.
        The `type` parameter is automatically set to `1` for load balancers.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=install_proxy" \
          -d "server_name=Load Balancer EU" \
          -d "server_ip=192.168.1.100" \
          -d "ssh_port=22" \
          -d "root_username=root" \
          -d "root_password=yourpassword"
        ```
      tags: [Server API]
      operationId: installProxy
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [install_proxy]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [ssh_port, root_password]
              properties:
                server_name:
                  type: string
                  description: Friendly name for the load balancer
                  example: "Load Balancer EU"
                server_ip:
                  type: string
                  description: Server IP address or domain
                  example: "192.168.1.100"
                ssh_port:
                  type: integer
                  description: SSH port number (REQUIRED)
                  default: 22
                  example: 22
                root_username:
                  type: string
                  description: SSH username
                  default: "root"
                  example: "root"
                root_password:
                  type: string
                  description: SSH password (REQUIRED)
                  format: password
                  example: "yourpassword"
      responses:
        '200':
          description: Load balancer installation initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_server:
    post:
      summary: Edit Server Settings
      description: |
        Modify configuration of an existing streaming server.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_server" \
          -d "id=1" \
          -d "server_name=Server USA Updated" \
          -d "http_broadcast_port=9000"
        ```
      tags: [Server API]
      operationId: editServer
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_server]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Server ID to edit
                  example: 1
                server_name:
                  type: string
                  description: New server name
                  example: "Server USA Updated"
                server_ip:
                  type: string
                  description: New server IP address
                  example: "192.168.1.51"
                http_broadcast_port:
                  type: integer
                  description: HTTP broadcast port
                  example: 9000
                https_broadcast_port:
                  type: integer
                  description: HTTPS broadcast port
                  example: 9443
                http_ports_add:
                  type: string
                  description: Additional HTTP ports (comma-separated)
                  example: "8001,8002,8003"
                https_ports_add:
                  type: string
                  description: Additional HTTPS ports (comma-separated)
                  example: "8444,8445"
      responses:
        '200':
          description: Server updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_server:
    post:
      summary: Remove Server
      description: |
        Delete a server from your panel.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_server" \
          -d "id=1"
        ```
      tags: [Server API]
      operationId: deleteServer
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_server]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Server ID to delete
                  example: 1
      responses:
        '200':
          description: Server removed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=restart_server:
    post:
      summary: Restart Server Services
      description: |
        Restart streaming services on a specific server.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=restart_server" \
          -d "server_id=1"
        ```
      tags: [Server API]
      operationId: restartServer
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [restart_server]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [server_id]
              properties:
                server_id:
                  type: integer
                  description: Server ID to restart
                  example: 1
      responses:
        '200':
          description: Server services restarting
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_server_info:
    get:
      summary: Get Server Information
      description: |
        Retrieve detailed information about a specific server.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_server_info&server_id=1"
        ```
      tags: [Server API]
      operationId: getServerInfo
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_server_info]
        - name: server_id
          in: query
          required: true
          schema:
            type: integer
          description: Server ID
          example: 1
      responses:
        '200':
          description: Server information retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          server_id:
                            type: integer
                          server_name:
                            type: string
                          server_ip:
                            type: string
                          http_port:
                            type: integer
                          status:
                            type: string

  /?action=get_server_stats:
    get:
      summary: Get Server Statistics
      description: |
        Retrieve usage statistics for a specific server.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_server_stats&server_id=1"
        ```
      tags: [Server API]
      operationId: getServerStats
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_server_stats]
        - name: server_id
          in: query
          required: true
          schema:
            type: integer
          description: Server ID
          example: 1
      responses:
        '200':
          description: Server statistics retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=install_load_balancer:
    post:
      summary: Install Load Balancer
      description: |
        Add a load balancer to distribute traffic across servers.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=install_load_balancer" \
          -d "name=LB-Primary" \
          -d "server_ip=192.168.1.100"
        ```
      tags: [Server API]
      operationId: installLoadBalancer
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [install_load_balancer]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [name, server_ip]
              properties:
                name:
                  type: string
                  description: Load balancer name
                  example: "LB-Primary"
                server_ip:
                  type: string
                  description: Load balancer IP
                  example: "192.168.1.100"
                username:
                  type: string
                  description: SSH username
                  example: "root"
                password:
                  type: string
                  description: SSH password
                  example: "secure_password"
      responses:
        '200':
          description: Load balancer installed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_load_balancer:
    post:
      summary: Edit Load Balancer
      description: |
        Modify load balancer configuration.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_load_balancer" \
          -d "id=1" \
          -d "name=LB-Updated"
        ```
      tags: [Server API]
      operationId: editLoadBalancer
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_load_balancer]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Load balancer ID
                  example: 1
                name:
                  type: string
                  description: New load balancer name
                  example: "LB-Updated"
                server_ip:
                  type: string
                  description: New IP address
                  example: "192.168.1.101"
      responses:
        '200':
          description: Load balancer updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'


  # Settings & System API
  /?action=get_settings:
    get:
      summary: Get Panel Settings
      description: |
        Retrieve current panel configuration settings.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_settings"
        ```
      tags: [Settings & System]
      operationId: getSettings
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_settings]
      responses:
        '200':
          description: Panel settings retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_settings:
    post:
      summary: Update Panel Settings
      description: |
        Modify panel configuration.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_settings" \
          -d "panel_name=My IPTV Panel" \
          -d "default_timezone=UTC"
        ```
      tags: [Settings & System]
      operationId: editSettings
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_settings]
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                panel_name:
                  type: string
                  description: Panel display name
                  example: "My IPTV Panel"
                default_timezone:
                  type: string
                  description: Default timezone
                  example: "UTC"
                allowed_ips:
                  type: string
                  description: Comma-separated IP whitelist
                  example: "192.168.1.0/24,10.0.0.1"
      responses:
        '200':
          description: Settings updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=reload_nginx:
    post:
      summary: Reload Nginx Configuration
      description: |
        Reload Nginx web server configuration without downtime.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=reload_nginx"
        ```
      tags: [Settings & System]
      operationId: reloadNginx
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [reload_nginx]
      responses:
        '200':
          description: Nginx reloaded successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=clear_cache:
    post:
      summary: Clear System Cache
      description: |
        Clear all system caches (Redis, file cache, etc).
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=clear_cache"
        ```
      tags: [Settings & System]
      operationId: clearCache
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [clear_cache]
      responses:
        '200':
          description: Cache cleared successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=backup_database:
    post:
      summary: Backup Database
      description: |
        Create a full database backup.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=backup_database"
        ```
      tags: [Settings & System]
      operationId: backupDatabase
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [backup_database]
      responses:
        '200':
          description: Backup created successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          backup_file:
                            type: string
                            description: Backup filename
                          backup_size:
                            type: string
                            description: Backup file size

  /?action=restore_database:
    post:
      summary: Restore Database
      description: |
        Restore database from backup file.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=restore_database" \
          -d "backup_file=backup_2024_12_15.sql"
        ```
      tags: [Settings & System]
      operationId: restoreDatabase
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [restore_database]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [backup_file]
              properties:
                backup_file:
                  type: string
                  description: Backup filename to restore
                  example: "backup_2024_12_15.sql"
      responses:
        '200':
          description: Database restored successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_categories:
    get:
      summary: Get All Categories
      description: |
        Retrieve list of all content categories.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_categories"
        ```
      tags: [Settings & System]
      operationId: getCategories
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_categories]
      responses:
        '200':
          description: Categories list retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            category_name:
                              type: string
                            parent_id:
                              type: integer

  /?action=create_category:
    post:
      summary: Create Category
      description: |
        Add a new content category.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_category" \
          -d "category_name=Action Movies" \
          -d "category_type=vod" \
          -d "parent_id=0"
        ```
      tags: [Settings & System]
      operationId: createCategory
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_category]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [category_name, category_type]
              properties:
                category_name:
                  type: string
                  description: Category name
                  example: "Action Movies"
                category_type:
                  type: string
                  description: Category type
                  enum: [live, vod, series, radio]
                  example: "vod"
                parent_id:
                  type: integer
                  description: Parent category ID
                  default: 0
                  example: 0
      responses:
        '200':
          description: Category created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_category:
    post:
      summary: Edit Category
      description: |
        Modify category details.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_category" \
          -d "id=10" \
          -d "category_name=Premium Action Movies"
        ```
      tags: [Settings & System]
      operationId: editCategory
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_category]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Category ID
                  example: 10
                category_name:
                  type: string
                  description: New category name
                  example: "Premium Action Movies"
                parent_id:
                  type: integer
                  description: New parent category
                  example: 0
      responses:
        '200':
          description: Category updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_category:
    post:
      summary: Delete Category
      description: |
        Remove a category.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_category" \
          -d "id=10"
        ```
      tags: [Settings & System]
      operationId: deleteCategory
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_category]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Category ID
                  example: 10
      responses:
        '200':
          description: Category deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=get_bouquets:
    get:
      summary: Get All Bouquets/Packages
      description: |
        Retrieve list of all subscription packages.
        
        **Example:**
        ```bash
        curl "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=get_bouquets"
        ```
      tags: [Settings & System]
      operationId: getBouquets
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [get_bouquets]
      responses:
        '200':
          description: Bouquets list retrieved
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            bouquet_name:
                              type: string
                            channels:
                              type: array
                              items:
                                type: integer

  /?action=create_bouquet:
    post:
      summary: Create Bouquet
      description: |
        Add a new subscription package.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=create_bouquet" \
          -d "bouquet_name=Premium Package" \
          -d "bouquet_channels[]=1" \
          -d "bouquet_channels[]=2" \
          -d "bouquet_channels[]=3"
        ```
      tags: [Settings & System]
      operationId: createBouquet
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [create_bouquet]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [bouquet_name]
              properties:
                bouquet_name:
                  type: string
                  description: Package name
                  example: "Premium Package"
                bouquet_channels:
                  type: array
                  description: Array of channel/stream IDs
                  items:
                    type: integer
                  example: [1, 2, 3, 10, 15]
      responses:
        '200':
          description: Bouquet created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=edit_bouquet:
    post:
      summary: Edit Bouquet
      description: |
        Modify bouquet/package details.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=edit_bouquet" \
          -d "id=5" \
          -d "bouquet_name=VIP Premium Package"
        ```
      tags: [Settings & System]
      operationId: editBouquet
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [edit_bouquet]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Bouquet ID
                  example: 5
                bouquet_name:
                  type: string
                  description: New package name
                  example: "VIP Premium Package"
                bouquet_channels:
                  type: array
                  description: Updated channel list
                  items:
                    type: integer
                  example: [1, 2, 3, 5, 10, 15, 20]
      responses:
        '200':
          description: Bouquet updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'

  /?action=delete_bouquet:
    post:
      summary: Delete Bouquet
      description: |
        Remove a bouquet/package.
        
        **Example:**
        ```bash
        curl -X POST "http://your-server.com/cSbuFLhp/?api_key=API-KEY&action=delete_bouquet" \
          -d "id=5"
        ```
      tags: [Settings & System]
      operationId: deleteBouquet
      parameters:
        - $ref: '#/components/parameters/ApiKey'
        - name: action
          in: query
          required: true
          schema:
            type: string
            enum: [delete_bouquet]
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required: [id]
              properties:
                id:
                  type: integer
                  description: Bouquet ID
                  example: 5
      responses:
        '200':
          description: Bouquet deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'



components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: query
      name: api_key
      description: |
        API key for authentication. Generate from your admin profile.
        
        **Example:** `8D3135D30437F86EAE2FA4A2A8345000`

  parameters:
    ApiKey:
      name: api_key
      in: query
      required: true
      description: Your API key for authentication
      schema:
        type: string
        example: "8D3135D30437F86EAE2FA4A2A8345000"
    
    Action:
      name: action
      in: query
      required: true
      description: The API action to perform
      schema:
        type: string
      example: user_info

  schemas:
    SuccessResponse:
      type: object
      required:
        - status
        - data
      properties:
        status:
          type: string
          enum: [STATUS_SUCCESS]
          description: Response status indicator
        data:
          type: object
          description: Response data (structure varies by endpoint)
      example:
        status: "STATUS_SUCCESS"
        data: {}

    ErrorResponse:
      type: object
      required:
        - status
        - error
      properties:
        status:
          type: string
          enum: [STATUS_FAILURE]
          description: Error status indicator
        error:
          type: string
          description: Error message describing what went wrong
      example:
        status: "STATUS_FAILURE"
        error: "Invalid API key"

    UserInfo:
      type: object
      description: User information object
      properties:
        id:
          type: string
          description: User ID
          example: "1"
        username:
          type: string
          description: Username
          example: "admin"
        member_group_id:
          type: string
          description: Member group ID (1 = Administrator)
          example: "1"
        email:
          type: string
          format: email
          description: User email address
          example: "admin@example.com"
        date_registered:
          type: string
          description: Unix timestamp of registration date
          example: "1609459200"
        last_login:
          type: string
          description: Unix timestamp of last login
          example: "1734048000"
        status:
          type: string
          description: User status (1 = Active, 0 = Inactive)
          enum: ["0", "1"]
          example: "1"

    Line:
      type: object
      description: Subscription line object
      properties:
        id:
          type: string
          description: Line ID
          example: "123"
        username:
          type: string
          description: Line username
          example: "testuser"
        password:
          type: string
          description: Line password
          example: "testpass123"
        exp_date:
          type: string
          description: Expiration date (Unix timestamp)
          example: "1735689600"
        max_connections:
          type: string
          description: Maximum concurrent connections allowed
          example: "1"
        is_trial:
          type: string
          description: Trial status (0 = No, 1 = Yes)
          enum: ["0", "1"]
          example: "0"
        enabled:
          type: string
          description: Line status (0 = Disabled, 1 = Enabled)
          enum: ["0", "1"]
          example: "1"
        is_restreamer:
          type: string
          description: Reseller status (0 = No, 1 = Yes)
          enum: ["0", "1"]
          example: "0"
        bouquet:
          type: string
          description: Assigned bouquet/package IDs (JSON array)
          example: "[1,2,3]"
        notes:
          type: string
          description: Admin notes
          example: "Premium customer"
        created_at:
          type: string
          description: Creation date (Unix timestamp)
          example: "1609459200"

  responses:
    Unauthorized:
      description: Authentication failed - Invalid API key or access code
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: "STATUS_FAILURE"
            error: "Invalid API key"

    ServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: "STATUS_FAILURE"
            error: "Internal server error"

    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: "STATUS_FAILURE"
            error: "Resource not found"
