HideMyAndroid Headless API

HideMyAndroid ko poori tarah ADB ya kisi bhi automation tool se control karein — app khole bina profiles create, configure aur activate karein. Premium, app 1.2.8+.

Aakhri baar update kiya: June 2026

Requirements

Headless API aapko HideMyAndroid ko poori tarah ADB ya kisi bhi automation tool se control karne deta hai — app UI ki zaroorat ke bina. Ye ek Premium feature hai.

  • Premium account — Headless API sirf Premium users ke liye hai.
  • App version 1.2.8 ya usse naya. Uske baad jo bhi juda hai woh extra field hai, isliye 1.2.8 abhi bhi chalta hai — lekin naye fields ke liye naya build chahiye: hook_spoof_uptime ke liye 1.3.4+, geo aur profile.duplicate dono ke liye 1.4.5+. Purana build anjaan field ko ignore kar deta hai aur phir bhi ok=true hi bhejta hai, isliye agar koi setting bekaar lage to status se chal rahi version check karein.
  • Root + LSPosed — wahi setup jo HideMyAndroid ko pehle se chahiye hota hai. Installation guide dekhein.
  • ADB aapke device se connected ho (adb devices usse list karta hai).
  • Device par internet — sirf tab zaroori hai jab aap proxy enable karein (usse live test kiya jaata hai).

⚠️ VPN permission sirf un profiles ke liye chahiye jo proxy use karte hain. Headless system ka VPN consent dialog nahi khol sakta, isliye ise ek baar app ki Headless API screen se de dein. Bina iske, proxy waale profile ko activate karne par profile to activate ho jaata hai, lekin proxy connect nahi hota aur call INTERNAL lautati hai jisme yahi likha hota hai.

Authentication

App mein Settings → Developer → Headless API kholein aur Enable on karein. Ek key apne aap generate ho jaati hai — Copy par tap karein. Har request is key ko token parameter ke roop mein bhejti hai.

Isse private rakhein — jiske paas key aur ADB access ho, woh aapke profiles control kar sakta hai. Regenerate ek nayi key banata hai (purani band ho jaati hai); log out karne par ye mit jaati hai.

Is poore reference mein, <your_access_token> ki jagah apni key aur <profile_id> ki jagah woh id daalein jo profile.create return karta hai.

Requests banana

Do transports, ye is hisaab se chunne jaate hain ki kisi value mein colon : hai ya nahi

Transport Iske liye Command
content call Reads, aur bina : waali values (name, gmails, package names)adb shell content call
am broadcast JSON objects (hookFlags, proxy, deviceMock, sim) — inme : hota haiadb shell am broadcast

content call har --extra ko colon par split karta hai, isliye woh JSON nahi le ja sakta — isi wajah se JSON values broadcast ke through bheji jaati hain.

Sirf teen methods ka broadcast roop hai: HEADLESS_UPDATE (profile.update), HEADLESS_SET_ACTIVE aur HEADLESS_DEACTIVATE. Baaki nau — status, saare read operations, profile.create, profile.duplicate, profile.delete aur target-app calls — sirf content call se chalte hain. HEADLESS_CREATE naam ki koi cheez hai hi nahi, dhoondhne ki zaroorat nahi.

Broadcast sirf JSON ke liye nahi hai. HEADLESS_UPDATE theek saat extras aage bhejta hai — name, hookFlags, proxy, geo, deviceMock, sim, gmails — isliye name aur gmails dono transport se ja sakte hain. Upar ki table ye batati hai ki kaunsa aasaan hai, na ki kaunsa mumkin hai. In saat ke alawa jis bhi extra ka naam ho, use bina error diye hata diya jaata hai.

Responses. Success ka matlab hai ok=true (content call) ya result=0 (broadcast); failure par error_code aur error_message add ho jaate hain. Error codes dekhein. Har method token bhi leta hai. Niche kisi bhi operation par click karke uske parameters, request, aur response expand karein.

Status

READ status Check karein ki API ready hai content call

Parameters

No parameters.

Request

bash
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.4.5"}, ok=true}]

Fields: premium, featureEnabled, freshnessOk, activeProfileId (ya null), version. freshnessOk tab true hota hai jab app ne pichhle 24 ghante mein online license validation poora kiya ho. Jaanch khud offline hai — headless request kabhi network par nahi jaati, woh sirf save kiya hua result padhti hai, aur premium bhi offline hi padha jaata hai. freshnessOk ko true rakhne ke liye din mein kam se kam ek baar app kholein.

💡 status hi ek aisa method hai jo license expire ya stale hone par bhi jawaab deta hai — baaki har call sirf LICENSE_EXPIRED ya LICENSE_STALE lautati hai. Jab koi request reject ho, in dono ko alag pehchaanne ka tareeka yahi hai: premium dekhein ki Premium sach mein khatam hua hai kya, aur freshnessOk dekhein ki bas app ek baar kholna hai kya. status par bhi FEATURE_DISABLED aur UNAUTHORIZED lagte hain, isliye band API ya galat token yahan bhi waise hi dikhte hain jaise kahin aur.

Profiles

READ profile.list Saare profiles list karein content call

Parameters

No parameters.

Request

bash
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 Ek profile poora padhein content call

Parameters

Name Type Required Description
id string required Profile id.

Request

bash
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,...},"geo":{"source":"PROXY",...},"deviceMock":{"enabled":false,...},"sim":{"enabled":false,"simCards":[]},"gmails":[],"targetApps":["com.whatsapp"]}, ok=true}]
CREATE profile.create Profile banayein (uski id return karta hai) content call

Parameters

Name Type Required Description
name string required Profile ke liye ek label.

Request

bash
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}]

Is id ko aage ke calls ke liye <profile_id> ki jagah copy kar lein.

CREATE profile.duplicate Profile clone karein, nayi identity ke saath content call

Parameters

Name Type Required Description
id string required Jis profile se copy karni hai uski id.

Request

bash
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.duplicate --extra token:s:<your_access_token> --extra id:s:<profile_id>

Response ok=true

Bundle[{data={"id":"e5f6a7b8-...","name":"Brave Falcon 42"}, ok=true}]

Nayi id aur khud bani hui name — dono wapas aate hain. profile.create sirf id deta hai, isliye in dono ko ek jaisa na samjhein.

⚠️ Name app khud banata hai aur is call mein chuna nahi ja sakta. Apna naam chahiye to turant baad profile.update se copy ka naam badal dein.

Copy mein kya-kya jaata hai

Profile ko bilkul waise hi clone karta hai jaise app ka Duplicate menu — app 1.4.5+ chahiye. Settings saath chali jaati hain, lekin har pehchaan wali value dobara generate hoti hai, taaki copy ka apna fingerprint ho, na ki original ka hamshakl. Iska broadcast roop nahi hai: fire-and-forget broadcast aapko nayi id laut kar de hi nahi sakta, aur yahi to is call ka poora maqsad hai.

Kya Copy mein
Target apps, hookFlags, proxy (uski validate ho chuki geo samet), geo, hidden packages Jyon ka tyon chala jaata hai
Device ka har identifier — profile level par bhi aur profile ke har app ke liye alag-alag bhi Naye sire se jaari hote hain, isliye copy ka apna fingerprint hota hai, original ka hamshakl nahi
deviceMock (jab on ho) Kisi doosre device template par badal jaata hai
sim Desh wahi, number naye
Backup packages Copy nahi hote — backups {package}-{profileId} se bandhe hote hain, isliye copy ke paas ek bhi nahi hota aur woh khaali shuru karti hai
Virtual Gmail accounts Agar source mein hook_virtual_accounts on tha to ek naya address; nahi tha to khaali list
Name Khud banta hai aur unique hone ki guarantee hai, Brave Falcon 42 jaise roop mein — aap ise chun nahi sakte, isiliye ye aapko wapas bheja jaata hai
Active state Hamesha isActive: false — duplicate karne se profile activate nahi hota

Apna naam chahiye to pehle duplicate karein, phir doosri call mein rename karein:

bash
# 1. duplicate — the new id and its generated name come back together
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.duplicate --extra token:s:<your_access_token> --extra id:s:<source_profile_id>

# 2. rename the copy — profile.duplicate never takes a name of your own
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<new_profile_id> --extra name:s:"My Profile"
UPDATE profile.update Profile ke settings badlein content call / broadcast

Parameters

Name Type Required Description
id string required Profile id.
name string optional Naya profile label (content call).
gmails string[] optional Virtual @gmail.com accounts (content call).
hookFlags object optional Spoofing on/off switches (broadcast).
proxy object optional Proxy config (broadcast).
geo object optional Location ka source — proxy ya custom (broadcast). App 1.4.5+ chahiye.
deviceMock object optional Device model spoof (broadcast).
sim object optional SIM / carrier spoof (broadcast).

Request

content call — plain values

bash
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 configs

bash
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

Dono tareeke poora updated profile return karte hain. Har JSON field ke liye Configuration dekhein.

⚠️ hookFlags poore set ko replace kar deta hai — aap jo bhi flag chhod denge woh apni default value par wapas chala jaata hai, jo har flag ke liye ON hai sivaay hook_spoof_uptime ke, jiske liye OFF hai. Yaani aisa update jisme hook_spoof_uptime na ho, use chupchaap wapas band kar deta hai. Kuch flags badalne aur baaki rakhne ke liye, pehle profile.get chalayein, poora map edit karein, phir sab wapas bhej dein.

DELETE profile.delete Profile hamesha ke liye delete karein content call

Parameters

Name Type Required Description
id string required Profile id.

Request

bash
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}]

Activation

Profile tabhi spoof karta hai jab woh active ho, aur ek samay par sirf ek hi profile active rehta hai. profile.setActive active profile ko badal deta hai — pehle jo active tha use apne aap deactivate kar diya jaata hai, isliye pehle profile.deactivate bulaane ki zaroorat nahi.

⚠️ Activate karne se target apps ka data mit jaata hai. profile.setActive unhe sirf restart nahi karta: woh har target app ko force-stop karta hai aur uska data wipe kar deta hai, taaki woh saaf-suthra chalu ho aur nayi identity sach mein le sake. Ye jaan-boojh kar aisa hai — lekin iska matlab hai ki un apps ke andar ka sab kuch chala jaata hai, logged-in sessions samet, App ke andar yahi kaam pehle confirmation maangta hai aur Backup feature ki taraf ishaara karta hai; headless call koi dialog nahi dikhata aur seedha chal jaata hai, isliye yahi ek chetavani aapko milti hai.

ACTION profile.setActive Profile activate karein — spoofing shuru karein content call / broadcast

Parameters

Name Type Required Description
id string required Profile id. Broadcast par ise id ya profile_id dono naam se bheja ja sakta hai.

Request

content call — recommended

bash
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>

broadcast — automation ke liye

bash
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_SET_ACTIVE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id>

Response ok=true

Bundle[{data={"id":"a1b2...","isActive":true}, ok=true}]
ACTION profile.deactivate Active profile deactivate karein — spoofing band karein content call / broadcast

Parameters

No parameters.

Request

content call — recommended

bash
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token>

broadcast — automation ke liye

bash
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_DEACTIVATE -p com.wowsoftware.hidemyandroid -e token <your_access_token>

Response ok=true

Bundle[{data={}, ok=true}]

Id ki zaroorat nahi — jo bhi profile active hoga usse deactivate kar deta hai.

content call hi behtar tareeka hai: ye synchronous hai aur laut kar aaya Bundle print karta hai. HEADLESS_SET_ACTIVE aur HEADLESS_DEACTIVATE broadcasts wahi kaam Tasker jaise automation tools ke liye karte hain. Ye ordered broadcast ki tarah jawaab dete hain, jo hamesha data wapas laata hai: safal hone par am broadcast result=0 ke saath result JSON data="…" mein print karta hai, aur fail hone par result=1 ke saath data="{"error_code":…,"error_message":…}". Yaani ye poori tarah fire-and-forget nahi hain — data= parse kar lein to wahi jawaab milta hai jo content call deta. HEADLESS_SET_ACTIVE profile id ko -e id ya -e profile_id dono roop mein leta hai; HEADLESS_DEACTIVATE ko id ki zaroorat hi nahi. Hamesha ki tarah -p com.wowsoftware.hidemyandroid zaroor lagayein.

Target apps

Target apps woh apps hain jinhe ek profile spoof karta hai.

READ profile.getApps Profile ki target apps list karein content call

Parameters

Name Type Required Description
id string required Profile id.

Request

bash
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 Profile mein target app add karein content call

Parameters

Name Type Required Description
id string required Profile id.
packageName string required App ka package name.

Request

bash
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}]

⚠️ Same package do baar add karne par BAD_REQUEST milta hai.

DELETE profile.removeApp Profile se target app hatayein content call

Parameters

Name Type Required Description
id string required Profile id.
packageName string required Jo app hatani hai.

Request

bash
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}]

⚠️ Jo package profile mein hai hi nahi, use hataane par bhi call safal hoti hai aur kuch nahi badalta — ye error nahi hai. Ye jaan-boojh kar addApp se alag hai, jahan duplicate add karne par BAD_REQUEST milta hai.

Configuration

Ye woh values hain jo aap profile.update ke saath bhejte hain. Profile bante waqt ki defaults:

Setting Default Isse use karne ke liye…
hookFlags (all 21) ✅ ON — sivaay hook_spoof_uptime ❌ OFF Pehle se on hai. Sirf un flags ke liye false bhejein jinhe band karna hai — aur hook_spoof_uptime ke liye true, wahi ek flag hai jo shuru mein band rehta hai.
proxy ❌ OFF "enabled":true shaamil karein
geo PROXY "source":"CUSTOM" ke saath coordinates, countryCode aur timezone bhejein — bina proxy ke location set ho jaayegi
deviceMock ❌ OFF "enabled":true shaamil karein
sim ❌ OFF "enabled":true shaamil karein
gmails empty Addresses bhejein (virtual accounts default se on rehte hain)

⚠️ enabled:false waala config store to hota hai par inert rehta hai — values save ho jaati hain taaki aap baad mein isse on kar sakein, lekin enabled:true hone tak kuch spoof nahi hota. geo iska apvaad hai: usme enabled switch hai hi nahi. hook_geo_* flags tab bhi lagte hain jab geo se koi kaam ki location nikal aaye — chahe source: CUSTOM se, ya aise proxy se jo enabled:true ho aur apna live test paas kar chuka ho.

hookFlags

Default: har flag ON hai sivaay hook_spoof_uptime ke, jo OFF hai. Ye "flag": true|false ka ek map hai. Update poore map ko replace kar deta hai, lekin sirf us map ko jo aapne sach mein bheja hai: jis update mein hookFlags extra hai hi nahi, woh kisi bhi flag ko nahi chhedta. Aur jo map aap bhejte hain, usme aap jo bhi flag chhod denge woh apni-apni default value par laut jaata hai, isliye baaki 20 wapas ON ho jaate hain jabki hook_spoof_uptime wapas OFF ho jaata hai, chahe aapne use on kiya ho. Kuch flags badalne aur baaki rakhne ke liye, pehle profile.get chalayein, poora map edit karein, phir sab wapas bhej dein.

Flag Ye kya karta hai
hook_hide_dev_opts Developer Options chhupayein
hook_hide_vpn VPN chhupayein
hook_hide_airplane_mode Airplane mode chhupayein
hook_hide_proxy System proxy setting chhupayein
hook_hide_root Root chhupayein
hook_hide_lsposed LSPosed chhupayein
hook_spoof_installer Install source spoof karein
hook_package_info Package info / signatures spoof karein
hook_lan_scan_block LAN scanning block karein
hook_identifiers_partly Device ke basic identifiers spoof karein
hook_identifiers_fully Device ke poore identifier set ko spoof karein — jo kuch hook_identifiers_partly cover karta hai, woh sab isme shaamil hai
hook_wifi Jis Wi-Fi network se juda hai uski details spoof karein
hook_nearby_wifi Aaspaas ke Wi-Fi scan results spoof karein
hook_nearby_bluetooth Aaspaas ke Bluetooth devices spoof karein
hook_realistic_sensor Realistic sensor data use karein
hook_sensor_accelerometer Accelerometer spoof karein (hook_realistic_sensor chahiye)
hook_spoof_uptime Device uptime spoof karein — device aisa lagta hai jaise woh zyada der se chal raha ho. Premium, experimental. Default se band — sirf yahi ek aisa flag hai. App 1.3.4+ chahiye.
hook_virtual_accounts Virtual Google accounts enable karein (gmails ke liye iska ON hona zaroori hai)
hook_geo_gps GPS location spoof karein (geo chahiye — proxy se ya custom)
hook_geo_locale Language/region spoof karein (geo chahiye — proxy se ya custom)
hook_geo_timezone Timezone spoof karein (geo chahiye — proxy se ya custom)

proxy

Default: OFF. enabled:true ke saath, app sach mein iske through connect karta hai, iski location padhta hai, aur countryCode/lat/lon/timezone bhar deta hai. Live test mein ~8s tak lagte hain; jo proxy fail hota hai woh PROXY_INVALID return karta hai aur save nahi hota. Ye chaar fields output hain — inhe app khud likhta hai, isliye aap inme jo bhi bhejenge woh overwrite ho jaayega. Location khud set karni ho to geo ke source: CUSTOM ka istemaal karein; usme proxy ki zaroorat hi nahi. profile.get proxy ko in chaar fields samet wapas deta hai, lekin username ya password kabhi wapas nahi bhejta.

Field Type Default Matlab / constraints
host string "" Proxy IP / hostname
port int 0 Port — 165535, sirf tab check hota hai jab aap proxy enable karte hain
protocol string HTTP HTTP, SOCKS4, ya SOCKS5
username string "" Auth (optional) — profile.get ise kabhi wapas nahi bhejta
password string "" Auth (optional) — profile.get ise kabhi wapas nahi bhejta
countryCode string "" Output — 2-letter country, live test se bhara jaata hai
lat double 0 Output — live test se bhara jaata hai
lon double 0 Output — live test se bhara jaata hai
timezone string "" Output — IANA naam, live test se bhara jaata hai
bash
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"}'

geo

Default: {"source":"PROXY"}. App 1.4.5+ chahiye. Profile ki location yahin se aati hai, aur iske do source hain — source se ek chunein. PROXY woh location leta hai jo proxy ke live test ke dauran padhi gayi thi. CUSTOM aapko coordinates, timezone aur region khud set karne deta hai, bina kisi proxy ke — yaani profile ko Tokyo mein rakh sakte hain jabki traffic kahin bhi jaaye, ya kahin bhi na jaaye. Uske baad teen hook_geo_* flags har hisse ko alag-alag on karte hain: GPS, region + language, aur timezone.

⚠️ Field ke naam dhyaan se dekhein: geo mein ye latitude/longitude hain, jabki upar proxy mein chhote naam lat/lon hain. Ye do alag objects hain, alias nahi — geo payload mein chhote naam bas ignore ho jaate hain.

Field Type Default Matlab / constraints
source string PROXY Zaroori. Bilkul PROXY ya CUSTOM — value missing ho ya spelling galat ho to BAD_REQUEST milta hai, ise chupchaap PROXY nahi maana jaata
latitude double 0 CUSTOM ke liye zaroori — -90 se 90 ke beech hona chahiye; 0/0 ko unset maana jaata hai
longitude double 0 CUSTOM ke liye zaroori — -180 se 180 ke beech hona chahiye; 0/0 ko unset maana jaata hai
countryCode string "" CUSTOM ke liye zaroori — 2 letters, jaise JP. Bhejte waqt case se farq nahi padta, wapas hamesha uppercase mein milta hai
timezone string "" CUSTOM ke liye zaroori — IANA naam, jaise Asia/Tokyo. Sirf khaali na hone ki jaanch hoti hai — neeche di gayi chetavani dekhein
language string "" Optional — 2-letter ISO 639-1 jaise ja, na ki ja-JP jaisa poora tag. Khaali chhodne par countryCode se nikaala jaata hai, aur hamesha lowercase mein store hota hai. Sirf CUSTOM ise khud set kar sakta hai; PROXY waale raaste mein ye hamesha apne aap nikaala jaata hai

⚠️ source: CUSTOM poora hona chahiye: coordinates jo 0/0 na hon aur range mein hon, 2-letter countryCode, aur timezone. Inme se ek bhi chhoot gaya to call BAD_REQUEST deta hai — ye proxy par wapas nahi girta. App kabhi geocoding nahi karta aur inhe bharne ke liye kabhi online nahi jaata. Agar dono mein se koi bhi source kaam ka na nikle, to koi geo hook load hi nahi hota aur asli location dikh jaati hai.

🛑 timezone hi ek aisa field hai jiski asli jaanch nahi hoti. Sirf itna dekha jaata hai ki khaali na ho — IANA database se kabhi milaaya nahi jaata. Asia/Tokyoo jaisi typo accept ho jaati hai, ok=true deti hai, profile.get use jyon ka tyon wapas kar deta hai, aur phir device par chupchaap GMT ban jaati hai. Kahin bhi koi error report nahi hoti, isliye naam bilkul theek copy karein. Coordinates iska ulta hain — unki range sach mein check hoti hai aur galat value turant BAD_REQUEST ke saath fail hoti hai.

CUSTOM — location khud set karein, proxy ki zaroorat nahi

bash
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}'

PROXY — location proxy se lein (default)

bash
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"PROXY"}'

deviceMock

Default: OFF. Device ko ek alag model dikhaata hai. "enabled":true ke saath in fields mein se koi bhi set karein — sab optional strings hain (default khaali), har ek Android ke Build property se map hoti hai:

Field Map hota hai Example
manufacturer Build.MANUFACTURER Samsung
brand Build.BRAND samsung
model Build.MODEL SM-S918B
device Build.DEVICE (codename) 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 Dikhne waala device name Galaxy S23 Ultra
bash
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

Default: OFF. SIM/carrier spoof karta hai. "enabled":true set karein aur simCards mein do tak cards dein. List hamesha theek do par normalise hoti hai: teesra card chupchaap hata diya jaata hai — call phir bhi ok=true deta hai — aur ek hi card dene par doosra khaali card jod diya jaata hai, isiliye profile.get hamesha do cards wapas deta hai. Har card:

Field Type Default Matlab / constraints
slotIndex int 0 SIM slot — array mein card ki position se tay hota hai (0, phir 1); aapki bheji hui value ignore hoti hai
carrierName string "" Carrier ka naam (jaise AT&T)
countryIso string "" ISO country code (jaise us) — lowercase mein store hota hai. Dhyaan dein ki ye geo.countryCode ke ulta hai, jo uppercase mein store hota hai
mcc string "" Mobile Country Code (jaise 310)
mnc string "" Mobile Network Code (jaise 410)
operatorCode string "" Operator code = mcc + mnc (jaise 310410)
phoneNumber string "" Phone number
iccid string "" SIM serial number (ICCID)
imsi string "" IMSI
networkType string "" Network type — neeche di gayi accepted values dekhein; na pehchaani gayi value chupchaap ignore ho jaati hai

networkType ke aage-peeche ki space hata kar, bina case ka dhyaan rakhe match kiya jaata hai, aur har network generation ke ek se zyada roop chalte hain:

Value Ye bhi chalta hai Network tier
NR 5G NR, 5G 5G
LTE 4G 4G
WCDMA UMTS, 3G 3G
GSM 2G 2G

⚠️ Is table ke bahar ki koi bhi value us card ka network-type spoof chupchaap band kar deti hai — na error, na BAD_REQUEST: value bas save ho jaati hai aur kabhi istemaal nahi hoti. Dhyaan dein ki NR 5G mein space hai: NR5G pehchaana nahi jaata aur seedha isi khaamosh gadde mein gir jaata hai.

bash
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

Default: khaali. Virtual Google accounts ki ek list — sirf @gmail.com addresses accept hote hain. Nayi list purani ko replace kar deti hai; [] usse clear kar deta hai. Andar koi : nahi hota, isliye content call chal jaata hai:

bash
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]"]'

Poora example

Shuru se ek poora setup:

bash
# 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. pick where the location comes from — geo has two sources, choose ONE
#    A) from the proxy you just set. This is the default, so the line is optional:
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"PROXY"}'
#    B) or set it yourself — this needs no proxy at all. Use B *instead of* A, not after it:
# adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}'
#    geo and proxy are independent: setting one never rewrites the other, and only
#    geo.source decides which one feeds the hooks. So CUSTOM together with a proxy in
#    a different country means your IP says one place while your GPS says another.

# 8. activate (restarts the target app and clears its data)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>

# 9. 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>

Error codes

Fail hone par aapko ok=false ke saath in error_code values mein se ek milta hai (broadcasts result=1 return karte hain):

Code Matlab Fix
UNAUTHORIZED Token missing ya galat hai Apni current key use karein; pakka na ho to regenerate karein
FEATURE_DISABLED Headless API off hai Isse Settings → Developer → Headless API mein enable karein
BAD_REQUEST Galat parameter ya JSON Required fields, valid JSON, sirf gmail, aur koi duplicate app na ho — ye check karein
NOT_FOUND Woh profile id maujood nahi hai profile.list se id confirm karein
PROXY_INVALID Proxy live test mein fail ho gaya Host/port/protocol/auth aur device ka internet check karein; ye save nahi hua tha
LICENSE_EXPIRED Premium expire ho gaya Premium renew karein
LICENSE_STALE License haal hi mein online check nahi hui Re-validate karne ke liye app ek baar kholein (lagaatar use ke liye kam se kam har 24h mein)
INTERNAL Internal error (I/O ya root) Dobara try karein; check karein ki root/LSPosed theek se kaam kar rahe hain

Tips & troubleshooting

  • Broadcast kuch nahi kar raha? Pakka karein ki aapne -p com.wowsoftware.hidemyandroid shaamil kiya hai — iske bina Android broadcasts block kar deta hai.
  • Koi value : ke baad kat gayi? Us value mein colon hai, isliye content call ne usse truncate kar diya. Isse HEADLESS_UPDATE broadcast ke through bhejein.
  • JSON broadcast apply nahi ho raha (aksar Windows par)? Desktop shell aur device shell, dono mein am broadcast JSON (hookFlags, proxy, deviceMock, sim) ke quotes aasaani se hat jaate hain, jisse am value ko galat padh leta hai (ho sakta hai woh dat=… data URI ban jaaye) aur kuch nahi badalta. Pakka tareeka ye hai ki JSON ko command line se bahar rakhein — poore workflow ko ek .sh file mein daalein (single quotes har JSON ko intact rakhte hain), phir usse device par push karke chalayein. Script device par chalti hai, isliye woh nayi profile id bhi capture karke dobara use kar sakti hai:
    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. pick where the location comes from — geo has two sources, choose ONE
    #    A) from the proxy you just set. This is the default, so the line is optional:
    am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e geo '{"source":"PROXY"}'
    #    B) or set it yourself — this needs no proxy at all. Use B *instead of* A, not after it:
    # am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}'
    #    geo and proxy are independent: setting one never rewrites the other, and only
    #    geo.source decides which one feeds the hooks. So CUSTOM together with a proxy in
    #    a different country means your IP says one place while your GPS says another.
    
    # 8. activate (restarts the target app and clears its data)
    content call --uri $URI --method profile.setActive --extra token:s:$K --extra id:s:$ID
    
    # 9. verify
    content call --uri $URI --method profile.get --extra token:s:$K --extra id:s:$ID
    phir usse device par push karke chalayein:
    bash
    adb push setup.sh /data/local/tmp/setup.sh
    adb shell sh /data/local/tmp/setup.sh
    Plain content call commands (bina JSON ke) bina script ke seedha type kiye ja sakte hain. Git Bash mein, adb lines ke aage MSYS_NO_PATHCONV=1 lagayein taaki device ka path re-write na ho.
  • Changes dikhe nahi? Target app ko restart hona zaroori hai — profile activate karne par ye apne aap ho jaata hai, aur usi step mein us app ka data bhi wipe ho jaata hai, isliye woh nayi identity ke saath bilkul saaf chalu hota hai.
  • Jis proxy par aapko bharosa hai uske liye PROXY_INVALID? Test ke liye device ko internet chahiye, jo ~8s tak limited hai, isliye slow proxy timeout ho sakta hai.
Download