Требования
Headless API позволяет управлять HideMyAndroid полностью через ADB или любой инструмент автоматизации — без использования интерфейса приложения. Это функция уровня Premium.
- Аккаунт Premium — Headless API доступен только для Premium-пользователей.
- Версия приложения 1.2.8 или новее.
- Root + LSPosed — стандартная конфигурация, необходимая для работы HideMyAndroid. Смотрите руководство по установке.
- ADB, подключённый к устройству (
adb devicesдолжно показывать его в списке). - Интернет на устройстве — требуется только при включении прокси (соединение проверяется в реальном времени).
⚠️ Убедитесь, что приложению уже предоставлено разрешение на VPN перед использованием режима headless.
Аутентификация
Откройте Настройки → Разработчику → Headless API в приложении и включите параметр Включить. Ключ будет сгенерирован автоматически — нажмите Скопировать. Каждый запрос передаёт этот ключ в параметре token.
Держите ключ в тайне — любой, у кого есть ключ и доступ через ADB, сможет управлять вашими профилями. Повторная генерация создаёт новый ключ (старый перестаёт работать); выход из аккаунта удаляет его.
В данном справочнике замените <your_access_token> своим ключом, а <profile_id> — идентификатором, возвращённым командой profile.create.
Отправка запросов
Два транспорта — выбор зависит от того, содержит ли значение двоеточие :
| Транспорт | Использовать для | Команда |
|---|---|---|
content call | Чтение и значения без : (name, gmails, имена пакетов) | adb shell content call |
am broadcast | JSON-объекты (hookFlags, proxy, deviceMock, sim) — они содержат : | adb shell am broadcast |
content call разбивает каждый параметр --extra по двоеточию, поэтому не может передавать JSON — именно поэтому JSON-значения отправляются через broadcast.
Ответы. Успех обозначается ok=true (content call) или result=0 (broadcast); при ошибке добавляются поля error_code и error_message. Смотрите раздел Коды ошибок. Каждый метод также принимает параметр token. Нажмите на любую операцию ниже, чтобы раскрыть её параметры, запрос и ответ.
Статус
READ status Проверить готовность API content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token> Response ok=true
Bundle[{data={"premium":true,"featureEnabled":true,"freshnessOk":true,"activeProfileId":"a1b2c3d4-...","version":"1.2.8"}, ok=true}] Поля: premium, featureEnabled, freshnessOk (лицензия недавно подтверждена онлайн), activeProfileId (или null), version.
Профили
READ profile.list Получить список всех профилей content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.list --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"id":"a1b2...","name":"Demo","isActive":true,"createdAt":1717000000000,"updatedAt":1717000500000}], ok=true}] READ profile.get Получить полные данные одного профиля content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={"id":"a1b2...","name":"Demo","isActive":false,"hookFlags":{"hook_wifi":true,...},"proxy":{"enabled":false,...},"deviceMock":{"enabled":false,...},"sim":{"enabled":false,"simCards":[]},"gmails":[],"targetApps":["com.whatsapp"]}, ok=true}] CREATE profile.create Создать профиль (возвращает его идентификатор) content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | required | Название профиля. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo Response ok=true
Bundle[{data={"id":"a1b2c3d4-..."}, ok=true}] Скопируйте этот идентификатор как <profile_id> для последующих вызовов.
UPDATE profile.update Изменить настройки профиля content call / broadcast
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
name | string | optional | Новое название профиля (content call). |
gmails | string[] | optional | Виртуальные аккаунты @gmail.com (content call). |
hookFlags | object | optional | Переключатели спуфинга вкл/выкл (broadcast). |
proxy | object | optional | Конфигурация прокси (broadcast). |
deviceMock | object | optional | Подмена модели устройства (broadcast). |
sim | object | optional | Подмена SIM / оператора (broadcast). |
Request
content call — обычные значения
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra name:s:"My Profile" broadcast — JSON-конфигурации
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e hookFlags '{"hook_wifi":false,"hook_nearby_bluetooth":false}' Response ok=true
Оба варианта возвращают полный обновлённый профиль. Все JSON-поля описаны в разделе «Конфигурация».
⚠️ hookFlags заменяет весь набор — любой флаг, который вы не укажете, вернётся к значению по умолчанию (ВКЛ). Чтобы изменить несколько флагов и сохранить остальные, сначала выполните profile.get, отредактируйте полную карту, затем отправьте её обратно целиком.
DELETE profile.delete Удалить профиль без возможности восстановления content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={}, ok=true}] Активация
Профиль выполняет спуфинг только в активном состоянии. При активации целевые приложения принудительно останавливаются, чтобы перезапуститься с новой идентичностью.
ACTION profile.setActive Активировать профиль — начать спуфинг content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={"id":"a1b2...","isActive":true}, ok=true}] ACTION profile.deactivate Деактивировать активный профиль — остановить спуфинг content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token> Response ok=true
Bundle[{data={}, ok=true}] Идентификатор не нужен — деактивируется любой активный в данный момент профиль.
Целевые приложения
Целевые приложения — это приложения, для которых профиль выполняет спуфинг.
READ profile.getApps Получить список целевых приложений профиля content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.getApps --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data=[{"packageName":"com.whatsapp"}], ok=true}] CREATE profile.addApp Добавить целевое приложение в профиль content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
packageName | string | required | Имя пакета приложения. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp Response ok=true · updated app list
Bundle[{data=[{"packageName":"com.whatsapp"}], ok=true}] ⚠️ Повторное добавление того же пакета возвращает BAD_REQUEST.
DELETE profile.removeApp Удалить целевое приложение из профиля content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Идентификатор профиля. |
packageName | string | required | Приложение для удаления. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.removeApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp Response ok=true · updated app list
Bundle[{data=[], ok=true}] Конфигурация
Это значения, которые передаются через profile.update. Значения по умолчанию при создании профиля:
| Настройка | По умолчанию | Чтобы использовать… |
|---|---|---|
| hookFlags (all 20) | ✅ ON | Уже включено. Отправьте false только для тех флагов, которые нужно отключить. |
| proxy | ❌ OFF | Включите "enabled":true |
| deviceMock | ❌ OFF | Включите "enabled":true |
| sim | ❌ OFF | Включите "enabled":true |
| gmails | empty | Отправьте адреса (виртуальные аккаунты включены по умолчанию) |
⚠️ Конфигурация с
enabled:falseсохраняется, но не применяется — значения сохранены, чтобы вы могли включить их позже, но спуфинг не выполняется до тех пор, пока не установленоenabled:true. Геоспуфинг (hook_geo_*) требует прокси сenabled:true, прошедшего проверку в реальном времени.
hookFlags
По умолчанию: все ВКЛ. Карта вида "flag": true|false. При обновлении весь набор заменяется — всё, что не указано, возвращается к значению ВКЛ.
| Флаг | Что делает |
|---|---|
hook_hide_dev_opts | Скрывает параметры разработчика |
hook_hide_vpn | Скрывает VPN |
hook_hide_airplane_mode | Скрывает режим полёта |
hook_hide_proxy | Скрывает системную настройку прокси |
hook_hide_root | Скрывает root |
hook_hide_lsposed | Скрывает LSPosed |
hook_spoof_installer | Подменяет источник установки |
hook_package_info | Подменяет информацию о пакете / подписи |
hook_lan_scan_block | Блокирует сканирование локальной сети |
hook_identifiers_partly | Подменяет Android ID (базовый уровень) |
hook_identifiers_fully | Подменяет все идентификаторы (IMEI, серийный номер, AAID, MediaDRM, AppSetID, boot_id…) |
hook_wifi | Подменяет имя/адрес Wi-Fi (SSID/BSSID) |
hook_nearby_wifi | Подменяет результаты сканирования ближайших сетей Wi-Fi |
hook_nearby_bluetooth | Подменяет список ближайших устройств Bluetooth |
hook_realistic_sensor | Использует реалистичные данные сенсоров |
hook_sensor_accelerometer | Подменяет акселерометр (требует hook_realistic_sensor) |
hook_virtual_accounts | Включает виртуальные аккаунты Google (gmails требует, чтобы это было ВКЛ) |
hook_geo_gps | Подменяет GPS-координаты (требует прокси с геолокацией) |
hook_geo_locale | Подменяет язык/регион (требует прокси с геолокацией) |
hook_geo_timezone | Подменяет часовой пояс (требует прокси с геолокацией) |
proxy
По умолчанию: ВЫКЛ. При enabled:true приложение устанавливает реальное соединение через прокси, получает его геолокацию и заполняет поля страны/широты/долготы/часового пояса для флагов hook_geo_*. Проверка в реальном времени занимает до ~8 с; прокси, не прошедший проверку, возвращает PROXY_INVALID и не сохраняется.
| Поле | Тип | По умолчанию | Значение / ограничения |
|---|---|---|---|
host | string | "" | IP-адрес или имя хоста прокси |
port | int | 0 | Порт — допустимо 1–65535 |
protocol | string | HTTP | HTTP, SOCKS4 или SOCKS5 |
username | string | "" | Аутентификация (необязательно) |
password | string | "" | Аутентификация (необязательно) |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}' deviceMock
По умолчанию: ВЫКЛ. Имитирует другую модель устройства. Установите "enabled":true и укажите любые из перечисленных полей — все строки необязательны (по умолчанию пустые), каждое соответствует свойству Android Build:
| Поле | Соответствует | Пример |
|---|---|---|
manufacturer | Build.MANUFACTURER | Samsung |
brand | Build.BRAND | samsung |
model | Build.MODEL | SM-S918B |
device | Build.DEVICE (кодовое имя) | dm3q |
product | Build.PRODUCT | dm3qxxx |
board | Build.BOARD | kalama |
hardware | Build.HARDWARE | qcom |
buildId | Build.ID | UP1A.231005.007 |
buildIncremental | Build.VERSION.INCREMENTAL | S918BXXU3CWK9 |
buildType | Build.TYPE | user |
buildTags | Build.TAGS | release-keys |
buildFingerprint | Build.FINGERPRINT | samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys |
deviceName | Отображаемое имя устройства | Galaxy S23 Ultra |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' sim
По умолчанию: ВЫКЛ. Подменяет SIM-карту/оператора. Установите "enabled":true и укажите до двух карт в поле simCards. Каждая карта:
| Поле | Тип | По умолчанию | Значение / ограничения |
|---|---|---|---|
slotIndex | int | 0 | Слот SIM — только 0 или 1 |
carrierName | string | "" | Название оператора (например AT&T) |
countryIso | string | "" | Код страны ISO (например us) — приводится к нижнему регистру автоматически |
mcc | string | "" | Код мобильной страны — MCC (например 310) |
mnc | string | "" | Код мобильной сети — MNC (например 410) |
operatorCode | string | "" | Код оператора = mcc + mnc (например 310410) |
phoneNumber | string | "" | Номер телефона |
iccid | string | "" | Серийный номер SIM (ICCID) |
imsi | string | "" | IMSI |
networkType | string | "" | Тип сети — только: LTE, NR 5G, WCDMA, GSM |
networkType принимает только следующие значения:
| Значение | Поколение сети |
|---|---|
NR 5G | 5G |
LTE | 4G |
WCDMA | 3G |
GSM | 2G |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G"}]}' gmails
По умолчанию: пусто. Список виртуальных аккаунтов Google — принимаются только адреса @gmail.com. Список полностью заменяет предыдущий; [] очищает его. Внутри нет символа :, поэтому подходит content call:
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]' Полный пример
Полная настройка с нуля:
# 1. create a profile — copy the returned id into <profile_id> below
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo
# 2. add a target app
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp
# 3. add the virtual Gmail accounts
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]'
# 4. enable + set the device mock
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}'
# 5. enable + set the SIM mock (two cards, full fields)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}'
# 6. enable + set the proxy (tested live, ~8s)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}'
# 7. activate (restarts the target app)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>
# 8. verify
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> Коды ошибок
При ошибке возвращается ok=false с одним из следующих значений error_code (broadcast возвращает result=1):
| Код | Значение | Решение |
|---|---|---|
UNAUTHORIZED | Токен отсутствует или неверен | Используйте текущий ключ; при необходимости перегенерируйте его |
FEATURE_DISABLED | Headless API отключён | Включите в Настройки → Разработчику → Headless API |
BAD_REQUEST | Неверный параметр или JSON | Проверьте обязательные поля, корректность JSON, только gmail-адреса, отсутствие дублирующихся приложений |
NOT_FOUND | Профиль с таким идентификатором не существует | Проверьте идентификатор с помощью profile.list |
PROXY_INVALID | Прокси не прошёл проверку в реальном времени | Проверьте хост/порт/протокол/аутентификацию и наличие интернета на устройстве; данные не сохранены |
LICENSE_EXPIRED | Срок действия Premium истёк | Обновите подписку Premium |
LICENSE_STALE | Лицензия давно не проверялась онлайн | Откройте приложение один раз для повторной проверки (не реже одного раза в 24 ч при непрерывном использовании) |
INTERNAL | Внутренняя ошибка (I/O или root) | Повторите попытку; убедитесь, что root/LSPosed работают корректно |
Советы & устранение неполадок
- Broadcast не даёт результата? Убедитесь, что вы включили параметр
-p com.wowsoftware.hidemyandroid— Android блокирует broadcast без него. - Значение обрезается после символа
:? В этом значении есть двоеточие, поэтомуcontent callобрезает его. Отправьте его через broadcastHEADLESS_UPDATE. - JSON broadcast не применяется (часто на Windows)? При передаче через оболочку рабочего стола в оболочку устройства кавычки в JSON команды
am broadcast(hookFlags,proxy,deviceMock,sim) легко теряются, иamнеправильно интерпретирует значение (оно может отображаться как URI видаdat=…), и ничего не меняется. Надёжное решение — не передавать JSON через командную строку: поместите весь рабочий процесс в файл.sh(одинарные кавычки сохраняют JSON нетронутым), затем загрузите его на устройство и запустите там. Скрипт выполняется на устройстве, поэтому он может захватить идентификатор нового профиля и использовать его далее:bashзатем загрузите его на устройство и запустите:# setup.sh — the full example as one runnable script (runs on the device) URI=content://com.wowsoftware.hidemyandroid.headless PKG=com.wowsoftware.hidemyandroid K=<your_access_token> # 1. create a profile and capture its id ID=$(content call --uri $URI --method profile.create --extra token:s:$K --extra name:s:Demo | grep -o '"id":"[^"]*"' | head -n1 | sed 's/.*"id":"//;s/"//') echo "profile id: $ID" # 2. add a target app content call --uri $URI --method profile.addApp --extra token:s:$K --extra id:s:$ID --extra packageName:s:com.facebook.katana # 3. add the virtual Gmail accounts content call --uri $URI --method profile.update --extra token:s:$K --extra id:s:$ID --extra 'gmails:s:["[email protected]","[email protected]"]' # 4. enable + set the device mock am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' # 5. enable + set the SIM mock (two cards) am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}' # 6. enable + set the proxy (tested live, ~8s) am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}' # 7. activate (restarts the target app) content call --uri $URI --method profile.setActive --extra token:s:$K --extra id:s:$ID # 8. verify content call --uri $URI --method profile.get --extra token:s:$K --extra id:s:$IDbashОбычные командыadb push setup.sh /data/local/tmp/setup.sh adb shell sh /data/local/tmp/setup.shcontent call(без JSON) можно вводить напрямую без скрипта. В Git Bash добавляйте префиксMSYS_NO_PATHCONV=1к строкам сadb, чтобы путь на устройстве не преобразовывался. - Изменения не применились? Целевое приложение должно перезапуститься — активация профиля делает это автоматически.
PROXY_INVALIDдля надёжного прокси? Устройству нужен интернет для проверки, ограниченной ~8 с, поэтому медленный прокси может не успеть ответить.