Skip to content

Container API Documentation ​

Introduction ​

Container API provides a set of container and host management capabilities, covering host information queries, image management, system control, instance lifecycle management, and more.

Usage ​

1. HTTP Call ​

Call from the host machine or other devices in the network:

  • URL Format: http://{Host_IP}:18182/{Interface_Path}
  • Example: http://192.168.1.100:18182/v1/get_hardware_cfg

Security

These APIs are intended for trusted LANs. Do not expose port 18182 directly to the public Internet. Shell, backup, network configuration, disk migration, and remote-debug endpoints are privileged. Callers must check both the HTTP status and the response business field code; 200 means success.

2. MCP Call (AI Agent Integration) ​

Expose container and host management capabilities directly to AI agents via MCP (Model Context Protocol).

Compatible clients: Claude Code, Cursor, Codex, Gemini, Tongyi Qianwen, Kimi, and any client that supports the MCP SSE protocol.

SSE Endpoint: http://{Host_IP}:18182/mcp/sse

bash
# Project-level (current project only, default)
claude mcp add --transport sse vmos-edge-container-api http://{Host_IP}:18182/mcp/sse
# Global (all projects)
claude mcp add -s user --transport sse vmos-edge-container-api http://{Host_IP}:18182/mcp/sse

# Remove
claude mcp remove vmos-edge-container-api
# Disable (keep config but don't load)
claude mcp disable vmos-edge-container-api
# Enable
claude mcp enable vmos-edge-container-api
# List
claude mcp list
yaml
# ~/.codex/config.yaml
mcp_servers:
  vmos-edge-container-api:
    type: sse
    url: "http://{Host_IP}:18182/mcp/sse"
json
// ~/.gemini/settings.json
{
  "mcpServers": {
    "vmos-edge-container-api": {
      "httpUrl": "http://{Host_IP}:18182/mcp/sse"
    }
  }
}
json
// .cursor/mcp.json in project root or ~/.cursor/mcp.json
{
  "mcpServers": {
    "vmos-edge-container-api": {
      "url": "http://{Host_IP}:18182/mcp/sse"
    }
  }
}
json
// Add in "MCP Services" settings
{
  "mcpServers": {
    "vmos-edge-container-api": {
      "type": "sse",
      "url": "http://{Host_IP}:18182/mcp/sse"
    }
  }
}

Once connected, AI can directly call tools for host info, image management, instance lifecycle, and more without manually constructing HTTP requests.

3. Skills Invocation (AI Agent Integration) ​

It is recommended to prioritize using the official skills repository vmos-dev/vmos-edge-skills.

bash
npx skills add https://github.com/vmos-dev/vmos-edge-skills --skill vmos-edge-container-api
bash
npx skills add https://github.com/vmos-dev/vmos-edge-skills --skill vmos-edge-container-api
bash
npx skills add https://github.com/vmos-dev/vmos-edge-skills --skill vmos-edge-container-api
bash
npx skills add https://github.com/vmos-dev/vmos-edge-skills --skill vmos-edge-container-api
bash
npx skills add https://github.com/vmos-dev/vmos-edge-skills --skill vmos-edge-container-api
bash
npx skills add https://github.com/vmos-dev/vmos-edge-skills --skill vmos-edge-container-api

Common Response Structure ​

All interfaces return a standard JSON format with the following structure:

json
{
    "code": 200,            // Status code, 200 for success
    "data": { ... },        // Specific business data
    "msg": "OK"             // Status description
}

Host Management (Host) ​

Get Host Configuration Information ​

Returns device hardware and basic operation information.

  • URL: /v1/get_hardware_cfg
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "message": "success",
      "data": {
        "cpuload": "0%",
        "cputemp": 33,
        "device_id": "93508a1ed52c4e1dee17320ec78f806a",
        "hwaddr": "82:C1:32:C6:E4:34",
        "ip": "192.168.10.20",
        "mem_total": "15943",
        "mem_use": "689",
        "mmc_total": "239281",
        "mmc_use": "20691",
        "ssd_total": "",
        "ssd_use": "",
        "model": "c1_10",
        "version": "QL-c1-2025.v0.3.0.202503311512"
      }
    }

Get Host System Information ​

Returns CPU usage, disk/memory usage, temperature, swap and other indicators.

  • URL: /v1/systeminfo
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": {
        "cpu": 5.4,
        "disk_percent": 39.3,
        "disk_total": 250903556096,
        "mem_percent": 63.9,
        "mem_total": 16720510976,
        "temperatures": 29.615,
        "swap_total": 0,
        "swap_percent": 0
      }
    }

Get Host Network Configuration ​

Returns host current gateway, subnet mask and subnet.

  • URL: /v1/net_info
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": "success",
      "data": {
        "host_ip": "192.168.10.20",
        "gateway": "192.168.10.1",
        "netmask": "255.255.254.0",
        "subnet": "192.168.10.0/23"
      }
    }

Host Heartbeat Check ​

Check host HTTP/Docker/Ping availability.

  • URL: /v1/heartbeat
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "message": "Host normal",
      "data": {
        "docker_status": true,
        "http_status": true,
        "ping_status": true
      }
    }

Get Host Image List ​

Returns docker images list repository and image_id.

  • URL: /v1/get_img_list
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": "success",
      "data": [
        {
          "repository": "armcloud/demo:latest",
          "image_id": "sha256:..."
        }
      ]
    }

Clean Unused Images ​

Clean unused Docker images on host.

  • URL: /v1/prune_images
  • Method: GET
  • Return Value Descriptions:
    codeDescription
    200Success
    201Failed
    1Host unreachable
  • Response Example:
    json
    {
      "code": 200,
      "msg": "success",
      "data": {
        "host_ip": "192.168.10.20",
        "freed_mb": "542.15",
        "images": [
          "vcloud_android13_edge_20250925011125",
          "vcloud_android12_edge_20250920010230"
        ]
      }
    }

Import Image ​

Upload image file to host and load image.

  • URL: /v1/import_image
  • Method: POST
  • Content-Type: multipart/form-data
  • Parameters:
    ParameterTypeRequiredDescription
    filefileYesImage file (.tar.gz or .tar format)
  • Stream Return Progress (NDJSON format):
    • Stage Descriptions:
      1. Uploading: Uploading (upload_progress=100%, load_progress=0%)
      2. Loading: Loading (upload_progress=100%, load_progress=1-99%)
      3. Success: Success (upload_progress=100%, load_progress=100%)
      4. Failed: Failed (upload_progress=100%, load_progress=0%)
  • Return Value Descriptions:
    codeDescription
    200Success (stream return)
    0Failed (file format error, upload failed, load failed, etc.)

Set Swap Switch ​

Set host swap partition status: 1 = enable, 0 = disable. Default is disabled; can be enabled after inserting SSD; swap partition default size is 8G (located at /container_nswc_lv/.swapfile).

  • URL: /v1/swap/{enable}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    enablestringYes1=Enable 0=Disable
  • Response Example:
    json
    {
      "code": 200,
      "msg": {
        "swap_total": 2147483648,
        "swap_percent": 0
      }
    }

Reboot Host ​

Asynchronously reboot host after issuing command.

  • URL: /v1/reboot_for_arm
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": "rebooting"
    }

Shutdown Host ​

Asynchronously shutdown host after issuing command. Executes shutdown -h now command.

  • URL: /v1/shutdown
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": "shutting down",
      "data": {
        "host_ip": "192.168.1.100"
      }
    }

Reset Host ​

Destroy containers, clean mappings, format and mount data disk, clean root partition and reboot.

  • URL: /v1/reset
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": "resetting and rebooting"
    }

Discovery Service Status ​

Return UDP responder status.

  • URL: /v1/discover
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "msg": "UDP discovery service status",
      "data": {
        "udp_responder": {
          "running": true
        }
      }
    }

Import Device Template ​

Import device template to host.

  • URL: /v1/import_adi
  • Method: POST
  • Content-Type: multipart/form-data
  • Parameters:
    ParameterTypeRequiredDescription
    adiZipfileYesADI template file (must be .zip format)
  • Return Value Descriptions:
    FieldDescription
    code200 Success; 0/1 Failed
    msgOperation result description
    data.host_ipHost IP
    data.filenameSaved filename
  • Response Example:
    json
    {
      "code": 200,
      "msg": "success",
      "data": {
        "host_ip": "192.168.10.20",
        "filename": "template.zip"
      }
    }

Get Host Device Template List ​

List all device templates uploaded and existing in template.json on host, supports filtering by brand and AOSP version, query all templates without parameters. Only returns actually existing files.

  • URL: /v1/get_adi_list
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    brandstringNoFilter brand (e.g., vivo, google, samsung)
    aosp_versionstringNoFilter AOSP version (e.g., 13, 14)
  • Return Value Descriptions:
    FieldDescription
    code200 Success; 0 Failed
    msgOperation result description
    data.host_ipHost IP
    data.listDevice template list (object array, only returns actually existing files)
    data.list[].adiIDTemplate ID
    data.list[].brandBrand
    data.list[].modelModel
    data.list[].model_nameModel name
    data.list[].aosp_versionAOSP version
    data.list[].layoutLayout (width×height×DPI)
    data.list[].adiNameTemplate filename (ZIP filename)
    data.list[].adiPassTemplate extraction password
  • Response Example:
    json
    {
      "code": 200,
      "msg": "success",
      "data": {
        "host_ip": "192.168.10.20",
        "list": [
          {
            "adiID": 2001,
            "brand": "google",
            "model": "Pixel 7 Pro(12G)",
            "model_name": "Pixel 7 Pro",
            "aosp_version": "13",
            "layout": "1440x3120x560",
            "adiName": "59ddfc6374723e2bea36a84792238063.zip",
            "adiPass": ""
          }
        ]
      }
    }

Instance Management (Instance) ​

Create Instance ​

Create Android instance (bridge network, sandbox storage, dynamic port allocation).

  • URL: /container_api/v1/create
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    user_namestringYesInstance username, length greater than 2, supports numbers/letters/underscore/dot/dash
    countintegerNoBatch creation quantity, default 1, maximum 12
    bool_startbooleanNoWhether to start instance immediately, default false
    bool_macvlanbooleanNoWhether to enable macvlan dual network card mode (bridge+macvlan), default false. After enabled, instance will get independent LAN IP
    bool_ping_disabledbooleanNoWhether the instance ignores Ping in macvlan mode
    macvlan_networkstringNomacvlan network name, default macvlan100. Only valid when bool_macvlan=true
    macvlan_start_ipstringNomacvlan start IP address, only valid when bool_macvlan=true. When count=1, directly use specified IP (requires ARP detection), when count>1, incrementally allocate from start IP
    image_repositorystringNoLocal image name (without tag), default value is vcloud_android13_edge_20250925011125
    bool_gms_disabledbooleanNoWhether to disable GMS when creating container, true=disable, false=do not disable, if not passed use value in game.info
    bool_gms_upgrade_enablebooleanNoWhether to allow GMS upgrade, true=allow, false=disallow, default false
    resolutionobjectNoResolution configuration object, contains dpi, fps, height, width
    scdArgsstringNoJSON string containing SCD streaming settings, for example {"video_bit_rate":"2097152","max_fps":"30"}
    selinuxbooleanNoWhether to enable SELinux
    dnsarray<string>NoDNS server list
    adiIDintegerNoADI template ID (highest priority, get available template IDs via /v1/get_adi_list), system will automatically find corresponding template file and password
    adiNamestringNoADI template filename (if adiID is passed, adiName and adiPass can be omitted)
    adiPassstringNoADI extraction password (if adiID is passed, adiName and adiPass can be omitted)
    lonfloatNoLongitude. e.g. 121.5
    latfloatNoLatitude. e.g. 31.2
    localestringNoLanguage. e.g. zh-CN
    timezonestringNoTimezone. e.g. Asia/Shanghai
    countrystringNoCountry code (ISO Alpha-2) used when randomly generating Android properties. Defaults to CN when not filled
    userPropstringNoCustom Android properties (JSON format string)
    proxyobjectNoProxy configuration to apply after creation; fields match the set-proxy endpoint
    cert_hashstringNoCertificate file hash value (priority use). Must be imported to system through certificate management interface
    cert_contentstringNoBase64 encoded certificate content (used when cert_hash is not provided). Only used for this creation, not saved to database or disk. Note: When using cert_content, bool_start must be true
    device_typestringNoDevice type. virtual indicates virtual machine, real indicates real device. Default is real. Note: When device_type is virtual, the system will forcibly clear the three parameters adiID, adiName, and adiPass
    remarkstringNoInstance remark information
  • Request Example:
    json
    {
      "user_name": "test-001",
      "bool_start": false,
      "image_repository": "vcloud_android13_edge_20250925011125",
      "adiID": 1039,
      "resolution": {
        "dpi": 560,
        "fps": 60,
        "height": 3040,
        "width": 1440
      },
      "selinux": false,
      "dns": ["8.8.8.8", "1.1.1.1"],
      "bool_gms_disabled": false,
      "bool_gms_upgrade_enable": false
    }

Batch Start Instances (Async) ​

Batch start instances asynchronously.

  • URL: /container_api/v1/run
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID array
    scdArgsstringNoSCD streaming configuration JSON string
  • Return Value Descriptions:
    codeDescription
    200Success, task queued
    460Another start task in progress
    203Running instance count will exceed limit
    1db_id does not exist
    2Instance not in stopped state

Batch Stop Instances (Async) ​

Batch stop instances asynchronously.

  • URL: /container_api/v1/stop
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID array

Batch Reboot Instances (Async) ​

Batch reboot instances asynchronously.

  • URL: /container_api/v1/reboot
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID array
    scdArgsstringNoSCD streaming configuration JSON string

Batch Reset Instances (Async) ​

Batch reset instances asynchronously.

  • URL: /container_api/v1/reset
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID array
    scdArgsstringNoSCD streaming configuration JSON string

Batch Delete Instances (Async) ​

Batch delete instances asynchronously.

  • URL: /container_api/v1/delete
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID array

Upgrade Instance Image ​

Upgrade specified instances to new image version. Upgrade process: stop container → delete container → rebuild with new image → start container. Data will be preserved.

  • URL: /container_api/v1/upgrade_image
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>Yesdb_id array
    repositorystringYesImage repository name (without tag, defaults to latest)
    adiIDintegerNoADI template ID (highest priority)
    adiNamestringNoADI template filename
    adiPassstringNoADI extraction password
    scdArgsstringNoSCD streaming configuration JSON string used after rebuilding

Rename Instance ​

Only modify user_name, do not modify db_id/Name (container name).

  • URL: /container_api/v1/rename/{db_id}/{new_user_name}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier
    new_user_namestringYesNew user_name (display name, length > 2)

Update Certificate Configuration ​

Update certificate configuration for specified instance. Priority use cert_hash (must be imported to system through certificate management interface). If not provided, use cert_content (base64 encoded, only used this time, not saved to database or disk). Certificate will be written to instance's debug_ramdisk/secure.prop file.

  • URL: /container_api/v1/update_cert
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier (EDGE + 12 random characters)
    cert_hashstringNoCertificate file hash value (priority use). Must be imported to system through certificate management interface, and file must exist at /etc/secure/<cert_hash> path. If both cert_hash and cert_content are provided, priority use cert_hash
    cert_contentstringNoBase64 encoded certificate content (used when cert_hash is not provided). Only used for this operation, not saved to database or disk, will be directly written to instance's debug_ramdisk/secure.prop file. Supports secure.prop format or XML format (will be automatically converted to prop format)
  • Note: One of cert_hash and cert_content must be provided
  • Request Example:
    json
    {
      "db_id": "EDGE0A1B2C3D4E5",
      "cert_hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"
    }

Update User Properties ​

Batch update user-defined Android properties of specified instances.

  • URL: /container_api/v1/update_user_prop
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance unique identifier list (EDGE + 12 random characters, supports batch operation)
    user_propstringYesUser-defined Android properties (JSON format string). e.g.: {"ro.product.model":"CustomModel","ro.build.version.sdk":"33"}
    preset_propobjectNoPreset property map generated from the client's preset selections
    isRestartbooleanNoWhether to restart instance after updating properties (optional, default false). When set to true, will asynchronously restart all instances in background
  • Request Example:
    json
    {
      "db_ids": ["EDGE0A1B2C3D4E5", "EDGE6F7G8H9I0J1"],
      "user_prop": "{\"ro.product.model\":\"CustomModel\",\"ro.build.version.sdk\":\"33\"}",
      "isRestart": false
    }

Set IP ​

Modify instance IP (macvlan only). Only accepts instances in macvlan mode, modify their LAN IP. Before modification, will check if db_id exists and if IP is already occupied.

  • URL: /container_api/v1/set_ip
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier (EDGE + 12 random characters)
    ipstringYesNew LAN IP, must be within macvlan network segment
  • Request Example:
    json
    {
      "db_id": "EDGE0A1B2C3D4E5",
      "ip": "192.168.10.120"
    }

Get Instance Details ​

Get detailed information for specified instance.

  • URL: /container_api/v1/get_android_detail/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier

Get Instance List ​

Get list of all instances.

  • URL: /container_api/v1/get_db
  • Method: POST

Get ADB Command ​

Get ADB connection command for specified instance.

  • URL: /container_api/v1/adb_start/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier

Screenshot ​

Get screenshot for specified instance.

  • URL: /container_api/v1/screenshots/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier
    formatstringNojpg, png, or webp; defaults to jpg
    widthintegerNoTarget width; the original image is returned when neither dimension is set
    heightintegerNoTarget height; supplying one dimension preserves the aspect ratio
    qualityintegerNoQuality for a resized JPG/WebP image
    no_cachebooleanNoSet to true to bypass the server's short-lived cache

Clone Instance ​

Clone specified instance.

  • URL: /container_api/v1/clone
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    user_namestringYesCloned instance name
    db_idstringYesCloned container db_id
    countintegerYesClone quantity, maximum is 12
    update_propbooleanNoWhether to automatically refresh Android properties after cloning, default false. When true, generate random androidProp based on source instance country
  • Request Example:
    json
    {
      "user_name": "test-001",
      "db_id": "EDGE0A1B2C3D4E5",
      "count": 1,
      "update_prop": true
    }

Clone Instance Task Status ​

Query clone instance task status.

  • URL: /container_api/v1/clone_status
  • Method: GET

Get ROM Status ​

Query whether instance ROM has started and is ready.

  • URL: /container_api/v1/rom_status/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier
  • Return Value Description:
    codemsgDescription
    0Instance not startedInstance not started
    1ROM not readyInstance running but ROM not ready
    200ROM readyROM ready

Query All Container IDs ​

Return db_id/user_name/adb list of all instances.

  • URL: /container_api/v1/list_names
  • Method: GET

Sync Instance Status ​

Sync instance status.

  • URL: /container_api/v1/sync_status
  • Method: GET

Batch One-Click Reset (Async) ​

Only allow running or stopped. Set state=renewing then asynchronously execute stop → clear data → start; preserve db_id and user_name.

  • URL: /container_api/v1/replace_devinfo
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance unique identifier list
    adiIDintegerNoADI template ID (highest priority, get available template IDs via /v1/get_adi_list), system will automatically find corresponding template file and password
    adiNamestringNoADI template filename (if adiID is passed, adiName and adiPass can be omitted)
    adiPassstringNoADI extraction password (if adiID is passed, adiName and adiPass can be omitted)
    countrystringNoCountry code (ISO Alpha-2) used when randomly generating Android properties, e.g. CN. When not filled, priority based on instance locale, otherwise defaults to CN
    userPropstringNoCustom Android properties (JSON format string)
    wipeDatabooleanNoWhether to clear data disk and reset debug_ramdisk, default true. When false, only refresh configuration and preserve data
    lonfloatNoLongitude. e.g. 121.5
    latfloatNoLatitude. e.g. 31.2
    localestringNoLanguage. e.g. zh-CN
    timezonestringNoTimezone. e.g. Asia/Shanghai
    cert_hashstringNoCertificate file hash value (priority use). Must be imported to system through certificate management interface
    cert_contentstringNoBase64 encoded certificate content (used when cert_hash is not provided). Only used for this operation, not saved to database or disk
    scdArgsstringNoSCD streaming configuration JSON string used after device replacement
  • Request Example:
    json
    {
      "db_ids": ["EDGE0A1...", "EDGE6F7..."],
      "adiID": 1039,
      "country": "CN",
      "wipeData": true,
      "userProp": "{\"persist.sys.country\":\"CN\"}",
      "lon": 121.5,
      "lat": 31.2,
      "locale": "zh-CN",
      "timezone": "Asia/Shanghai",
      "cert_hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"
    }

Batch Update Stopped Instance Image Information ​

Batch update image information for stopped instances. Only processes instances in stopped/failed state.

  • URL: /container_api/v1/update_stopped_image
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>Yesdb_id array (supports single or multiple)
    repositorystringYesImage repository name (without tag, default uses latest)
  • Request Example:
    json
    {
      "db_ids": ["EDGE0A1...", "EDGE6F7..."],
      "repository": "vcloud_android13_edge_20250925011125"
    }

Update Screen Projection Service ​

Update screen projection service.

  • URL: /container_api/v1/refreshScreenService
  • Method: POST
  • Content-Type: multipart/form-data
  • Parameters:
    ParameterTypeRequiredDescription
    filearray<file>YesUploaded files (supports scd or scd.sh, can upload multiple at once)
    db_idstringNoInstance ID (optional, choose one with user_name)
    user_namestringNoUsername (optional, choose one with db_id)

Enable GMS ​

Enable GMS service for all instances.

  • URL: /container_api/v1/gms_start
  • Method: GET

Disable GMS ​

Disable GMS service for all instances.

  • URL: /container_api/v1/gms_stop
  • Method: GET

Generate Device Model Backup ​

Back up the device model environment information of a specified instance for migrating device base environment between instances. Backup content includes device model, device name, and key Android device identifiers. It does not include APKs, app private data, or business account data.

  • URL: /container_api/v1/model_backup/{db_id}
  • Method: POST
  • Prerequisite: Instance status must be stopped / exited / failed
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesSource instance ID (path parameter)
    namestringYesBackup file name, .zip suffix recommended
  • Request Example:
    bash
    curl -X POST 'http://<host_ip>:18182/container_api/v1/model_backup/EDGENQM4QQCVS014' \
      -H 'Content-Type: application/json' \
      -d '{
        "name": "demo_model_backup.zip"
      }'
  • Response Example:
    json
    {
      "code": 0,
      "msg": "ok",
      "data": {
        "host_ip": "192.168.10.35",
        "db_id": "EDGENQM4QQCVS014",
        "file": "demo_model_backup.zip",
        "path": "/container_nswc_lv/model_backup/demo_model_backup.zip",
        "size": 25152641,
        "debug_ramdisk_files": 544,
        "identity_files": 3,
        "target_instance_name": "EDGENQM4QQCVS014"
      }
    }
  • Notes: Backup files are stored by default in the local directory /container_nswc_lv/model_backup/

Restore Device Model Backup ​

Restore backed-up device model environment information to a target instance. Supports specifying the backup file by name or absolute path.

  • URL: /container_api/v1/model_restore/{db_id}
  • Method: POST
  • Prerequisite: Target instance status must be stopped / exited / failed
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesTarget instance ID (path parameter)
    namestringNoBackup file name in the local backup directory (either name or path required)
    pathstringNoAbsolute path to the backup ZIP file (either name or path required)
  • Restore by Name Example:
    bash
    curl -X POST 'http://<host_ip>:18182/container_api/v1/model_restore/EDGEUVEPN3IUSEQP' \
      -H 'Content-Type: application/json' \
      -d '{
        "name": "demo_model_backup.zip"
      }'
  • Restore by Absolute Path Example:
    bash
    curl -X POST 'http://<host_ip>:18182/container_api/v1/model_restore/EDGEUVEPN3IUSEQP' \
      -H 'Content-Type: application/json' \
      -d '{
        "path": "/container_nswc_lv/model_backup/demo_model_backup.zip"
      }'
  • Response Example:
    json
    {
      "code": 0,
      "msg": "ok",
      "data": {
        "host_ip": "192.168.10.35",
        "db_id": "EDGEUVEPN3IUSEQP",
        "source_backup_name": "demo_model_backup",
        "debug_ramdisk_files": 544,
        "identity_files": 3,
        "warnings": []
      }
    }
  • Notes: If the source backup and target instance have different images or Android versions, the response may contain warnings. It is recommended to use this feature within the same major Android version

API Logs ​

Query Recent API Logs ​

Returns the last 20 API execution records.

  • URL: /interface_logs/recent
  • Method: GET

Show Log Details ​

Show log details.

  • URL: /interface_logs/detail
  • Method: GET

API Success Rate Query ​

Statistics on API execution count and success rate.

  • URL: /interface_logs/stats
  • Method: GET

App Management (App) ​

Get Application List ​

Get list of third-party app package names installed in instance.

  • URL: /android_api/v1/app_get/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier

Start App in Instance (Batch) ​

Batch start apps in specified instances.

  • URL: /android_api/v1/app_start
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID list, supports batch operation
    appstringYesApplication package name (single)
  • Request Example:
    json
    {
      "db_ids": ["EDGE0A1B2C3D4E5", "EDGE6F7G8H9J0K1"],
      "app": "com.chartcross.gpstest"
    }

Stop App in Instance (Batch) ​

Batch close apps in specified instances.

  • URL: /android_api/v1/app_stop
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsarray<string>YesInstance ID list, supports batch operation
    appstringYesApplication package name (single)
  • Request Example:
    json
    {
      "db_ids": ["EDGE0A1B2C3D4E5", "EDGE6F7G8H9J0K1"],
      "app": "com.tencent.mm"
    }

Set App Root Permission ​

Batch grant Root permission to specified apps in instances. App needs to be restarted after operation to take effect.

  • URL: /android_api/v1/root_app
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsstringYesInstance ID list, supports Chinese comma (,) and English comma (,) separated, e.g. EDGE0A1B2C3D4E5,EDGE6F7G8H9J0K1 or EDGE0A1B2C3D4E5,EDGE6F7G8H9J0K1
    appstringYesPackage name that needs Root permission (must be installed)
  • Request Example:
    json
    {
      "db_ids": "EDGE0A1B2C3D4E5,EDGE6F7G8H9J0K1",
      "app": "com.chartcross.gpstest"
    }

Add Display Over Other Apps Permission ​

Enable permission to display on top of other apps for specified app (overlay permission).

  • URL: /android_api/v1/add_show_other_app_over_permission
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance ID
    appstringYesApplication package name
  • Request Example:
    json
    {
      "db_id": "EDGEH06HF5E52NQL",
      "app": "com.zhiliaoapp.musically"
    }

File Operations (File) ​

Batch Install APK ​

Batch install to specified Android containers by uploading files. Supports single package APK and Split APK (multiple packages).

  • URL: /android_api/v1/upload_file_android_batch
  • Method: POST
  • Content-Type: multipart/form-data
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsstringYesInstance ID list, multiple separated by comma, e.g. EDGE123,EDGE456
    filefileYesInstallation package file: supports single package .apk; or split apk's .zip/.xapk/.tar/.tar.gz/.tgz (after extraction contains multiple .apk, xapk format extraction same as zip)

Batch Upload Files ​

Batch copy to specified instance directory by uploading local files.

  • URL: /android_api/v1/upload_file_android_upload
  • Method: POST
  • Content-Type: multipart/form-data
  • Parameters:
    ParameterTypeRequiredDescription
    db_idsstringYesInstance ID list, multiple separated by comma (supports Chinese comma,and English comma,), e.g. EDGE123,EDGE456 or EDGE123,EDGE456
    filefileYesFile to upload
    pathstringNoOptional, target directory, default /storage/emulated/0/Download

Batch Install APK (URL) ​

Download APK files via URL and batch install to specified Android containers.

  • URL: /android_api/v1/install_apk_from_url_batch
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    urlstringYesAPK file download URL
    db_idsstringYesInstance ID list, multiple separated by comma (supports Chinese comma,and English comma,), e.g. EDGE123,EDGE456 or EDGE123,EDGE456
  • Request Example:
    json
    {
      "url": "https://example.com/app.apk",
      "db_ids": "EDGE0A1B2C3D4E5,EDGE6F7G8H9J0K1"
    }

Batch Upload Files (URL) ​

Download files via URL and batch copy to specified instance directory.

  • URL: /android_api/v1/upload_file_from_url_batch
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    urlstringYesFile download URL
    db_idsstringYesInstance ID list, multiple separated by comma (supports Chinese comma,and English comma,), e.g. EDGE123,EDGE456 or EDGE123,EDGE456
    pathstringNoOptional, target directory, default /storage/emulated/0/Download
  • Request Example:
    json
    {
      "url": "https://example.com/file.zip",
      "db_ids": "EDGE0A1B2C3D4E5,EDGE6F7G8H9J0K1",
      "path": "/storage/emulated/0/Download"
    }

Export Phone APK ​

Export APK files of installed apps from specified instance, download through browser.

  • URL: /android_api/v1/export_phone_apk
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance ID
    appstringYesApplication package name
  • Note:
    • Single APK: returns [app].apk
    • Split APK (multi-package): returns [app]_apks.zip (contains multiple APKs)
    • Browser will automatically trigger download, user can choose save path
  • Request Example:
    json
    {
      "db_id": "EDGEH06HF5E52NQL",
      "app": "com.zhiliaoapp.musically"
    }

System Control (System) ​

Execute ADB Command ​

Execute custom ADB Shell commands.

  • URL: /android_api/v1/shell/{db_id}
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier
    cmdstringYesShell command to execute (request body)

Disable Current Window Application ​

Automatically get the package name of the current foreground app and use the am force-stop command to force disable the application.

  • URL: /android_api/v1/stop_front_app/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier

Set Instance Coordinates (GPS Location Injection) ​

Inject GPS location information into Android container.

  • URL: /android_api/v1/gps_inject/{db_id}
  • Method: POST
  • Path Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier (EDGE + 12 random characters)
  • Request Body Parameters:
    ParameterTypeRequiredDescription
    longitudefloatYesLongitude. Range: -180.0 ~ 180.0, positive for east longitude, negative for west longitude. Example: 116.397455 (Beijing Tiananmen)
    latitudefloatYesLatitude. Range: -90.0 ~ 90.0, positive for north latitude, negative for south latitude. Example: 39.909187 (Beijing Tiananmen)
    altitudefloatNoAltitude. Unit: meters (m). Represents height relative to sea level. Example: 8
    speedfloatNoMovement speed. Unit: meters/second (m/s). Represents device movement speed. Example: 8 (approximately 28.8 km/h)
    bearingfloatNoBearing/heading. Unit: degrees (°). Range: 0.0 ~ 360.0, represents device movement direction. 0° is north, 90° is east, 180° is south, 270° is west
    horizontalAccuracyMetersfloatNoHorizontal positioning accuracy. Unit: meters (m). Represents positioning precision, smaller value means more precise. Example: 0.1 (10 cm precision)
  • Request Example:
    json
    {
      "longitude": 116.397455,
      "latitude": 39.909187,
      "altitude": 43.5,
      "speed": 0,
      "bearing": 0,
      "horizontalAccuracyMeters": 5.0
    }

Set Video Injection ​

Set video injection.

  • URL: /android_api/v1/video_inject/{db_id}
  • Method: POST
  • Path Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesContainer ID
  • Request Body Parameters:
    ParameterTypeRequiredDescription
    urlstringYesVideo URL
  • Request Example:
    json
    {
      "url": "https://example.com/demo.mp4"
    }

Disable Video Injection ​

Disable video injection.

  • URL: /android_api/v1/video_inject_off/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier

Set Instance Timezone ​

Set instance timezone.

  • URL: /android_api/v1/timezone_set/{db_id}
  • Method: POST
  • Path Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesContainer ID
  • Request Body Parameters:
    ParameterTypeRequiredDescription
    timeZonestringYesTimezone, e.g. Asia/Shanghai. The uppercase Z is significant
  • Request Example:
    json
    {
      "timeZone": "Asia/Shanghai"
    }

Set Instance Country ​

Update instance country.

  • URL: /android_api/v1/country_set/{db_id}
  • Method: POST
  • Path Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier (EDGE + 12 random characters)
  • Request Body Parameters:
    ParameterTypeRequiredDescription
    countrystringYesCountry code (country_info.json country_code), e.g. CN, US, JP, etc.
  • Common Country Codes:
    CountryCodeCountryCode
    ChinaCNUnited StatesUS
    GermanyDEIndiaIN
    JapanJPUnited KingdomGB
    FranceFRItalyIT
    CanadaCABrazilBR
    AustraliaAUSpainES
    South KoreaKRNetherlandsNL
  • Request Example:
    json
    {
      "country": "CN"
    }

Set Instance Language ​

Set instance language.

  • URL: /android_api/v1/language_set/{db_id}
  • Method: POST
  • Path Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesContainer ID
  • Request Body Parameters:
    ParameterTypeRequiredDescription
    countrystringYesCountry code, e.g. CN
    languagestringYesLanguage code, e.g. zh
  • Request Example:
    json
    {
      "country": "CN",
      "language": "zh"
    }

Query Instance Country, Language, Timezone ​

Get country, language, timezone information of instance.

  • URL: /android_api/v1/get_timezone_locale/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesInstance unique identifier

Get Coordinates by IP ​

Query coordinates by instance or proxy IP.

  • URL: /android_api/v1/ip_geo/{db_id}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    db_idstringYesContainer ID
    ipstringNoOptional, IP to override query

Certificate Management (Certificate) ​

Import Certificate from File ​

Import certificate to system by uploading certificate file. Supports uploading multiple certificate files at once, system will automatically calculate SHA-256 hash value of certificate content as filename to save.

  • URL: /certificate_manage/file_import_cert
  • Method: POST
  • Content-Type: multipart/form-data
  • Supported File Formats: .crt, .pem, .cer, .cert (standard certificate format), .key (private key file), .prop (secure.prop format), .xml (XML format, will be automatically converted to prop format)
  • Parameters:
    ParameterTypeRequiredDescription
    filearray<file>YesCertificate file (supports multiple files)
    filenamestringNoFilename (optional, supports single or multiple, multiple separated by comma, supports Chinese comma,and English comma,)

Import Certificate from Text ​

Import certificate to system by passing certificate text content (base64 encoded). System will automatically detect certificate format (XML or prop format), XML format will be automatically converted to prop format.

  • URL: /certificate_manage/content_import_cert
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    contentstringYesBase64 encoded certificate content (required)
  • Supported Content Formats: secure.prop format (standard format), XML format (will be automatically converted to prop format)
  • Request Example:
    json
    {
      "content": "cm8uYnVpbGQuY2xvdWQuZ21zX3N1aXRlX2Rpc2FibGVkPTE="
    }

SSD Management (SSD) ​

Storage Status ​

Returns storage status scanned at startup: trial (trial, no SSD), new_ssd (new SSD found, action required), ssd (registered and mounted).

  • URL: /storage/status
  • Method: GET

Format as Data Disk and Mount ​

Format specified device as ext4 and mount to /container_nswc_lv, write to fstab(UUID).

  • URL: /storage/format
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    devicestringYesDevice path, e.g. /dev/nvme0n1 or its partition
    confirmbooleanYesConfirm operation
  • Request Example:
    json
    {
      "device": "/dev/nvme0n1",
      "confirm": true
    }

Import Existing Data Disk and Mount ​

No formatting, directly mount specified device as /container_nswc_lv.

  • URL: /storage/import
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    devicestringYesDevice path
    confirmbooleanYesConfirm operation
  • Request Example:
    json
    {
      "device": "/dev/nvme0n1",
      "confirm": true
    }

Version Update (Update) ​

CBS Version Update ​

Upload CBS executable file and update service, please refresh page after update.

  • URL: /v1/update_cbs
  • Method: POST
  • Content-Type: multipart/form-data
  • File Naming Requirements: Must be cbs_go_edge_version format, supports 'executable file without suffix' or .cbs suffix; does not support .exe
  • Parameters:
    ParameterTypeRequiredDescription
    filefileYesCBS executable file (filename must be cbs_go_edge_version format; supports no suffix or .cbs, does not support .exe)
  • Return Value Description:
    FieldDescription
    code200 success; 0 failed
    msgOperation result description
    data.host_ipHost IP
    data.current_versionCurrently running version number

Kernel Version Update ​

Upload kernel image file and update system kernel, host will automatically reboot after update.

  • URL: /v1/update_kernel
  • Method: POST
  • Content-Type: multipart/form-data
  • File Naming Requirements: Must be .img format image file
  • Execution Flow:
    1. Uploaded .img file saved to /userdata/new_boot.img
    2. Automatically set file executable permission (0755)
    3. Execute kernel flash command and reboot system
  • Parameters:
    ParameterTypeRequiredDescription
    filefileYesKernel image file (must be .img format)
  • Return Value Description:
    FieldDescription
    code200 success; 0 failed
    msgOperation result description
    data.host_ipHost IP

Desktop-integrated APIs ​

The following public Container APIs are integrated by VMOS Edge Desktop 2.2.8. Availability depends on the CBS version, so check the version before integration. Most endpoints use the common JSON envelope described above; forwarded endpoints may pass through msg / message and data fields from the device service.

Host Network Configuration ​

Get Current Network Configuration ​

  • URL: /sys/network/config
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "data": {
        "interface": "eth0",
        "ip": "192.168.10.20",
        "netmask": "255.255.255.0",
        "gateway": "192.168.10.1",
        "dns": ["8.8.8.8"],
        "manual": true
      },
      "msg": "OK"
    }

Set Static Network Configuration ​

  • URL: /sys/network/config
  • Method: POST
  • Parameters:
    ParameterTypeRequiredDescription
    ipstringYesStatic host IP
    netmaskstringYesNetwork mask
    gatewaystringYesDefault gateway
    dnsarray<string>NoDNS servers
  • Request Example:
    json
    {
      "ip": "192.168.10.20",
      "netmask": "255.255.255.0",
      "gateway": "192.168.10.1",
      "dns": ["8.8.8.8", "1.1.1.1"]
    }

The host address may change immediately after a successful response. Reconnect and run the heartbeat check against the new IP.

Restore DHCP ​

  • URL: /sys/network/config/reset
  • Method: POST
  • Parameters: None

Set Swap Size ​

  • URL: /v1/swap_size/{size_gb}
  • Method: GET
  • Parameters:
    ParameterTypeRequiredDescription
    size_gbintegerYesSwap size in GB, from 2 through 16
  • Note: This endpoint sets capacity. /v1/swap/{enable} controls the switch; the two endpoints are not interchangeable.

Proxy Management ​

Set Proxy ​

  • URL: /android_api/v1/proxy_set/{db_id}
  • Method: POST
  • Path Parameter: db_id is the instance ID.
  • Common Body Parameters:
    ParameterTypeRequiredDescription
    ipstringYesExit proxy IP or hostname
    portintegerYesProxy port
    proxyNamestringNoProtocol: http, socks5, shadowsocks, shadowsocksr, vmess, or vless; when omitted, the server applies its compatibility default
    accountstringNoUsername
    passwordstringNoPassword
    udpDisabledbooleanNoDisable UDP
    dnsOverProxyDisabledbooleanNoDisable DNS through the proxy
    engineTypeintegerNoProxy engine type; default 0
    nodesarrayNoProxy chain ordered from relay to exit
    proxyHashstringNoCaller-generated proxy configuration identity

Get Proxy ​

  • URL: /android_api/v1/proxy_get/{db_id}
  • Method: GET
  • Response Data: data.proxy_config contains the current configuration and data.engineType identifies the proxy engine.

Stop Proxy ​

  • URL: /android_api/v1/proxy_stop/{db_id}
  • Method: GET

Full Backup ​

A full backup includes instance data and differs from the device-profile model_backup / model_restore APIs.

Export Full Backup ​

  • URL: /backup/export?db_id={db_id}
  • Method: GET
  • Precondition: The instance must be stopped.
  • Response: On success, returns application/octet-stream; the filename is in Content-Disposition. Errors use the common JSON envelope.

Cancel Backup ​

  • URL: /backup/cancel
  • Method: POST
  • Request Example:
    json
    {
      "db_id": "EDGE0A1B2C3D4E5"
    }

Import Full Backup ​

  • URL: /backup/import
  • Method: POST
  • Content-Type: multipart/form-data
  • Parameters:
    ParameterTypeRequiredDescription
    filefileYesFull-backup archive; the server accepts .tar and .tar.gz, while the Desktop 2.2.8 picker currently accepts only .tar

Media Injection Status and Audio Injection ​

Desktop 2.2.8 currently uses mutually exclusive video and audio-only modes and stops the active injection before switching. The server video-injection API can also use injectType to select video, audio, or both, subject to the CBS/device version.

Get Video Injection Status ​

  • URL: /android_api/v1/getInjectStatus/{db_id}
  • Method: GET
  • Response Data: isInjecting, injectType, and injectUrl.

Inject Audio ​

  • URL: /android_api/v1/audio_inject/{db_id}
  • Method: POST
  • Request Example:
    json
    {
      "injectUrl": "rtsp://192.168.10.8:8554/audio"
    }

Stop Audio Injection ​

  • URL: /android_api/v1/audio_inject_off/{db_id}
  • Method: GET

Get Audio Injection Status ​

  • URL: /android_api/v1/getInjectAudioStatus/{db_id}
  • Method: GET
  • Response Data: isInjecting and source.

Video Injection Crop Parameter ​

In addition to the required url, POST /android_api/v1/video_inject/{db_id} accepts injectCropMode (integer; current values 0, 1, and 2) and injectType (video, audio, or both). Desktop 2.2.8 currently sends url and injectCropMode.

SCD Streaming Configuration ​

Get SCD Configuration ​

  • URL: /container_api/v1/scd_config/{db_id}
  • Method: GET
  • Response Example:
    json
    {
      "code": 200,
      "data": {
        "db_id": "EDGE0A1B2C3D4E5",
        "config": { "audio": "1" }
      },
      "msg": "OK"
    }

Update SCD Configuration ​

  • URL: /container_api/v1/scd_config/{db_id}
  • Method: POST
  • Request Example:
    json
    {
      "scdArgs": "{\"audio\":\"1\"}"
    }
  • Note: scdArgs is a required string. It may contain a JSON object string or space-separated key=value pairs such as audio=1 max_fps=30. Do not send { "audio": "1" } directly as the top-level body.

Restart SCD ​

  • URL: /container_api/v1/scd_restart/{db_id}
  • Method: POST
  • Parameters: None. Call after an update to apply the new configuration.

Full-Disk Migration ​

Disk migration is a high-impact host operation. Use dedicated source and target boxes and do not run instance lifecycle jobs concurrently.

Get Migration Status ​

  • URL: /disk_migration/v1/status
  • Method: GET
  • Response Data:
    FieldTypeDescription
    stagestringMigration stage; common values include source_not_prepared, source_prepared, target_ready, restore_pending_restart, rollback_pending_restart, and activated. Clients must tolerate new values
    readybooleanWhether the current stage is ready
    restart_requiredbooleanWhether a reboot is required
    current_device_idstringCurrent box identity
    manifest.source_device_idstringSource box identity recorded in the backup
    warningsarray<string>Non-blocking warnings

Prepare Source Disk ​

  • URL: /disk_migration/v1/prepare
  • Method: POST
  • Parameters: None

Restore Target Disk ​

  • URL: /disk_migration/v1/restore
  • Method: POST
  • Body: { "confirm": true }

Roll Back Restore ​

  • URL: /disk_migration/v1/rollback
  • Method: POST
  • Body: { "confirm": true }

Host Sharing ​

Join Sharing ​

  • URL: /v1/share/open
  • Method: POST
  • Body: { "url": "https://example.com/share-config" }

Close Sharing ​

  • URL: /v1/share/close
  • Method: POST
  • Parameters: None

SSH Remote-Debug Tunnel ​

Call tunnel endpoints only from a trusted LAN. Temporary usernames and passwords are sensitive and must not be logged or shared publicly.

Get Status ​

  • URL: /tunnel/status
  • Method: GET
  • Response Data: A healthy response includes state, locked, remote_port, expires_at, last_error, reconnect_count, enable_count, last_enable_at, and healthy. A degraded response also contains stable reason and hint fields.

Unlock ​

  • URL: /tunnel/unlock
  • Method: POST
  • Body: {}
  • Access Restriction: The TCP source must be loopback or an RFC1918 LAN address; otherwise the server returns HTTP 401.

Enable Tunnel ​

  • URL: /tunnel/enable
  • Method: POST
  • Body: {}
  • Access Restriction: The TCP source must be loopback or an RFC1918 LAN address; otherwise the server returns HTTP 401.
  • Response Data: password, remote_port, and expires_at. The password is returned only once. remote_port may still be 0 in this response, so poll /tunnel/status until state=connected and then use the actual port. The SSH username is fixed as cbs_debug and is not returned.

Disable Tunnel ​

  • URL: /tunnel/disable
  • Method: POST
  • Body: {}
  • Access Restriction: The TCP source must be loopback or an RFC1918 LAN address; otherwise the server returns HTTP 401.
  • Note: The desktop client also calls /tunnel/unlock after disabling to clear the lock state.