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 ya method hai, isliye 1.2.8 abhi bhi chalta hai — lekin naye hisson ke liye naya build chahiye:
hook_spoof_uptimeke liye 1.3.4+,geoaurprofile.duplicateke liye 1.4.5+, poore backup / restore group ke liye 1.5.3+, SIM & device generator (simCountries,deviceTemplate,sim.countries,device.templates) ke liye 1.5.9+,hook_sensor_gyroscopeke liye 1.6.3+,hook_sensor_lightke liye 1.6.4+, aur chaar sensor-coherence flags (hook_sensor_magnetometer,hook_sensor_fused,hook_sensor_pressure,hook_sensor_roster) ke liye 1.6.9+. Purana build anjaan field ko ignore kar deta hai aur phir bhiok=truehi bhejta hai — lekin anjaan method zyada shor karta hai: 1.5.3 se purane build par backup / restore group, ya 1.5.9 se purane build parsim.countries/device.templatescall karne seBAD_REQUESTmilta hai, jiskeerror_messagemein hota hai “Unknown method: …”. Agar koi setting bekaar lage to status se chal rahiversioncheck karein — packaged release usse imaandaari se report karta hai, lekin version bump se pehle khud compile kiya gaya build feature rakhte hue bhi purana number dikha sakta hai. - Root + LSPosed — wahi setup jo HideMyAndroid ko pehle se chahiye hota hai. Installation guide dekhein.
- ADB aapke device se connected ho (
adb devicesusse 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
INTERNALlautati 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, simCountries, built-in deviceTemplate ids) | adb shell content call |
am broadcast | JSON objects (hookFlags, proxy, deviceMock, sim) aur custom: template ids — inme : hota hai | adb 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 satrah — status, saare read operations (sim.countries aur device.templates samet), profile.create, profile.duplicate, profile.delete, target-app calls aur poora backup / restore group — sirf content call se chalte hain. HEADLESS_CREATE — ya HEADLESS_BACKUP — naam ki koi cheez hai hi nahi, dhoondhne ki zaroorat nahi.
Broadcast sirf JSON ke liye nahi hai. HEADLESS_UPDATE theek nau extras aage bhejta hai — name, hookFlags, proxy, geo, deviceMock, sim, gmails, aur 1.5.9 se simCountries aur deviceTemplate — isliye name, gmails aur simCountries dono transport se ja sakte hain. Upar ki table ye batati hai ki kaunsa aasaan hai, na ki kaunsa mumkin hai. In nau 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
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.5.9"}, 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.
💡
statushi ek aisa method hai jo license expire ya stale hone par bhi jawaab deta hai — baaki har call sirfLICENSE_EXPIREDyaLICENSE_STALElautati hai. Jab koi request reject ho, in dono ko alag pehchaanne ka tareeka yahi hai:premiumdekhein ki Premium sach mein khatam hua hai kya, aurfreshnessOkdekhein ki bas app ek baar kholna hai kya.statuspar bhiFEATURE_DISABLEDaurUNAUTHORIZEDlagte 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
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
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
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
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:
# 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). |
simCountries | string[] | optional | sim haath se likhne ke bajaye 1–2 country codes se SIM cards generate karein (dono transport). App 1.5.9+ chahiye — SIM & device generator dekhein. |
deviceTemplate | string | optional | Template se deviceMock generate karein — random ya device.templates ki koi id (content call; custom: ids ke liye broadcast). App 1.5.9+ chahiye. |
Request
content call — plain values
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
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
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}] ⚠️ Profile delete karne se uske app-data backups bhi /sdcard/HideMyAndroid_Backups/ ke neeche se delete ho jaate hain — zaroorat ho to pehle unhe device se bahar copy kar lein. Aur 1.5.3 se, jab tak koi backup / restore job slot pakde hue hai, profile.delete BUSY lautata hai — us job ke liye bhi jo cancel ho chuki hai; tab tak retry karein jab tak BUSY aana band na ho jaaye.
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.setActiveunhe 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. Headless mein safety net hai switch karne se pehlebackup.start(1.5.3+) chalana. Aur 1.5.3 se, jab tak koi backup / restore job slot pakde hue hai,profile.setActiveaurprofile.deactivateBUSYlautate hain — us job ke liye bhi jo cancel ho chuki hai; tab tak retry karein jab takBUSYaana band na ho jaaye.
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
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
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
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token> broadcast — automation ke liye
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
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
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
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.
Backup & restore
1.5.3 mein naya, ye group profile ke app data ko device par archives mein copy karta hai aur baad mein wapas daal deta hai — wahi kaam jo app mein Manage Backups karta hai, bas UI ke bina. Sabhi chhe methods sirf content call se chalte hain (broadcast roop nahi hai), aur dono *.start calls asynchronous hain: ye aapko turant ek jobId thama deti hain aur background mein kaam karti rehti hain — saath-saath dekhne ke liye backup.job poll karein. Ek hi app ka backup lene mein bhi minutes lag sakte hain.
⚠️ Ek waqt par sirf ek job. Jab ek job chal rahi ho, tab doosra
*.startBUSYlautata hai, jisme chal rahijobIderror_messagemein hoti hai. Dono*.startcalls ke liye target profile ka active hona bhi zaroori hai — warnaREQUIRES_ACTIVE_PROFILE, aur koi override flag nahi hai. Baaki chaar methods kisi bhi profile par kaam karte hain. Aur jaise headless API mein har jagah hota hai, koi confirmation nahi maanga jaata — har call seedha chal jaati hai.
ACTION backup.start Active profile ke liye backup job shuru karein content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Profile id — ye wahi profile hona chahiye jo abhi active hai. |
packages | string | optional | Backup karne waale package names, comma se alag (spaces nahi). Chhod dein to profile ki har target app ka backup hota hai. Har package profile ka hi hona chahiye. |
Request
content call — har target app
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.start --extra token:s:<your_access_token> --extra id:s:<profile_id> content call — sirf chune hue packages
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.start --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packages:s:com.twitter.android,com.facebook.katana Response ok=true · job accepted
Bundle[{data={"jobId":"f0e1d2c3-...","type":"backup","total":2,"packages":["com.twitter.android","com.facebook.katana"],"foregroundHeld":true}, ok=true}] Job accept hote hi call laut aati hai — ye copy ka intezaar nahi karti. total batata hai ki job kitni apps process karegi; saath-saath dekhne ke liye backup.job poll karein. foregroundHeld kya promise karta hai (aur kya nahi), iske liye neeche ke notes dekhein.
⚠️ Backup kabhi app ko force-stop ya clear nahi karta. Ek consistent snapshot padhne ke liye ye har component archive karte waqt app ko thodi der ke liye pause karta hai (SIGSTOP), phir resume kar deta hai (SIGCONT) — app chalti rehti hai aur kuch nahi khoti. Jis package ka backup pehle se hai uska backup lene par purana archive replace ho jaata hai: har app ka har profile mein ek hi backup, koi history nahi.
ACTION restore.start Backup kiya hua app data active profile mein restore karein content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Profile id — ye wahi profile hona chahiye jo abhi active hai. Backup sirf usi profile mein restore hota hai jisne use banaya tha. |
packages | string | optional | Restore karne waale package names, comma se alag (spaces nahi). Chhod dein to is profile mein jis-jis app ka backup hai, sab restore hoti hain — jin apps ka backup nahi hai woh chupchaap skip ho jaati hain. Packages ko naam lekar bhejein to ye fail-fast hai: ek bhi backup missing ho to poori call NO_BACKUP ke saath fail ho jaati hai aur kuch bhi restore nahi hota. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method restore.start --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true · job accepted
Bundle[{data={"jobId":"09a8b7c6-...","type":"restore","total":1,"packages":["com.twitter.android"],"foregroundHeld":true}, ok=true}] backup.start jaisa hi job model — response turant milta hai aur type field "restore" batata hai. Saath-saath dekhne ke liye backup.job poll karein; alag se koi restore.job nahi hai.
⚠️ Restore target app ko force-stop karta hai (am force-stop) aur usse dobara start nahi karta, phir archive ko /data/data/<pkg> ke upar extract karta hai, directory pehle saaf kiye bina — isliye backup ke baad app ne jo files banayi hain woh bach jaati hain. Aur backups package + profile se bandhe hote hain, isiliye cross-profile restore hai hi nahi — aap ek profile ka backup doosre mein nahi daal sakte.
READ backup.job Job ki progress aur results poll karein content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
jobId | string | optional | Jis job ko dekhna hai. Chhod dein to sabse recent job padhi jaati hai. |
Request
content call — ek specific job
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.job --extra token:s:<your_access_token> --extra jobId:s:<job_id> content call — sabse nayi job (bina jobId)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.job --extra token:s:<your_access_token> Response ok=true
# while it runs
Bundle[{data={"jobId":"f0e1d2c3-...","type":"backup","profileId":"a1b2...","state":"RUNNING","total":2,"done":0,"ok":0,"failed":0,"currentPackage":"com.twitter.android","currentComponent":"Internal Data","progress":0.31,"results":[],"error":null,"foregroundHeld":true,"startedAt":1712345678901,"finishedAt":null}, ok=true}]
# when it finishes — note: DONE even though one app failed
Bundle[{data={"jobId":"f0e1d2c3-...","type":"backup","profileId":"a1b2...","state":"DONE","total":2,"done":2,"ok":1,"failed":1,"currentPackage":null,"currentComponent":null,"progress":1.0,"results":[{"packageName":"com.twitter.android","ok":true,"error":null},{"packageName":"com.facebook.katana","ok":false,"error":"tar exited 2"}],"error":null,"foregroundHeld":true,"startedAt":1712345678901,"finishedAt":1712345699999}, ok=true}] Ek hi method dono job types ke liye hai — type "backup" ya "restore" batata hai. state hota hai RUNNING, DONE, FAILED ya CANCELLED; progress poori job par 0..1 chalta hai; startedAt / finishedAt epoch milliseconds hain aur job chalte waqt finishedAt null rehta hai. DONE ka matlab hai ki job aakhir tak chali — na ki har app safal hui — isliye failed aur results[] hamesha padhein (har app ke liye ek {packageName, ok, error}). currentComponent ek human-readable stage name hai ("Internal Data", "Device Encrypted Data", "External Data", "Media", "OBB", "Permissions", "SSAID") — jaan-boojh kar ye backup.list ke components[] jaisi strings nahi hain. Kisi bhi profile par kaam karta hai. Sirf paanch sabse recent jobs rakhi jaati hain — anjaan ya unse purani jobId NOT_FOUND lautati hai, aur agar abhi tak koi job chali hi nahi hai to poll karne par bhi yahi milta hai.
ACTION backup.cancel Chal rahi job cancel karein content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
jobId | string | optional | Jis job ko cancel karna hai. Chhod dein to sabse recent job cancel hoti hai. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.cancel --extra token:s:<your_access_token> --extra jobId:s:<job_id> Response ok=true · job snapshot
Cancel hone ke baad ka job snapshot lautata hai — wahi shape jo backup.job deta hai.
⚠️ App ke beech mein cancel karne par us app ka archive aadha-likha reh jaata hai: app backup list mein nahi judti aur bachi hui files ka koi bharosa nahi. Usse restore na karein — package ko backup.delete karke dobara backup lein. Aur snapshot turant CANCELLED par chala jaata hai (finishedAt bhi set ho jaata hai), lekin neeche chal raha root tar file ke beech mein roka nahi ja sakta aur chalta rehta hai — isliye CANCELLED dikh jaane ke baad bhi job slot pakde reh sakti hai (neeche ke notes dekhein).
READ backup.list Profile ke save kiye hue backups list karein content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Profile id — koi bhi profile, sirf active waala nahi. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.list --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data=[{"packageName":"com.twitter.android","appName":"X","timestamp":1712345678901,"totalSize":12345678,"components":["INTERNAL_DATA","EXTERNAL_DATA","OBB"]}], ok=true}] Har backup hui app ke liye ek entry. appName woh display name hai jo backup ke waqt capture hua tha (archive ke metadata.json se padha jaata hai, package se nahi nikaala jaata). timestamp epoch milliseconds hai, totalSize bytes hai, aur components[] enum names use karta hai: INTERNAL_DATA, DEVICE_ENCRYPTED, EXTERNAL_DATA, MEDIA, OBB, PERMISSIONS, SSAID.
DELETE backup.delete Profile se ek app ka backup delete karein content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Profile id. |
packageName | string | required | Jis app ka backup delete karna hai. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.twitter.android Response ok=true
Bundle[{data={}, ok=true}] Synchronous — koi job nahi banti; backup folder wahin ke wahin hata diya jaata hai. Jo backup hai hi nahi usse delete karna error nahi hai: call idempotent hai aur phir bhi ok=true ke saath data={} lautati hai. NOT_FOUND ka matlab sirf itna hai ki profile id maujood nahi hai; galat banaya hua packageName BAD_REQUEST lautata hai.
Jobs kaise behave karti hain
DONEka matlab ye nahi ki har app safal hui. Iska matlab sirf itna hai ki job aakhir tak chali. App fail ho sakti hai aur job phir bhiDONEpar khatam hoti hai —failedaurresults[]hamesha padhein.- Activation ab jobs ka intezaar karta hai. Jab tak koi job slot pakde hue hai,
profile.setActive,profile.deactivateaurprofile.deleteBUSYlautate hain — us job ke liye bhi jise aap cancel kar chuke hain, kyunki neeche chal raha roottarfile ke beech mein roka nahi ja sakta, aur snapshot ka koi bhi field slot report nahi karta. Jo job apne aapDONEyaFAILEDpar khatam hoti hai woh slot lagbhag turant chhod deti hai; cancel ke baadCANCELLEDko “slot khaali” na samjhein — bas call ko tab tak retry karein jab takBUSYaana band na ho jaaye. foregroundHeldek observation hai, promise nahi. Ye batata hai ki koi foreground service job ko OS ke haathon kill hone se bacha rahi hai ya nahi. API 36 par yetruemaapa gaya hai, lekintrueka bhi matlab sirf itna hai ki service start accept hua — baad waala promotion step kuch devices par ab bhi chupchaap fail ho sakta hai. Lambi jobs ke liye ispar bharosa karne ke bajaye device ko jagaye rakhein.- Backups kahan rehte hain.
/sdcard/HideMyAndroid_Backups/<packageName>-<profileId>/— har app ke liye har profile mein ek folder, jisme.tar.gzarchives (data.tar.gz,data_ext.tar.gz,media.tar.gz, …) aurmetadata.jsonhote hain, roottarse likhe gaye.{package}-{profileId}key hi woh wajah hai jisse restore sirf same-profile hota hai. Headless se banaye gaye backups app ki Manage Backups screen mein bhi dikhte hain.
Built-in database se SIM & device
1.5.9 mein naya. Neeche Configuration batata hai ki sim ya deviceMock block ko field-by-field haath se kaise likha jaata hai. Ye group aapko woh sab chhodne deta hai: profile.update ki do extra keys — simCountries aur deviceTemplate — app se poora block usi carrier aur device database se generate karwati hain jisse uska apna UI leta hai, aur do read methods batate hain ki woh kis-kis se generate kar sakta hai. Result profile mein enabled:true pehle se set karke save hota hai, isliye aur kuch bhejne ki zaroorat nahi — profile.get se use wapas padh lein.
⚠️ Har setting ke liye, har call mein ek hi tareeka. Ek hi request mein
simaursimCountriesdono bhejne parBAD_REQUESTmilta hai, aurdeviceMockke saathdeviceTemplatebhejne par bhi. Alag-alag settings ko aapas mein milaana theek hai — haath se likhedeviceMockke saathsimCountries, ya dono generators ek saath, jaise neeche pehle example mein. Call atomic hai: kuch bhi save hone se pehle sab kuch validate hota hai, isliye galat template id poori request fail kar deti hai aur uske saath bheja gayasimCountriesbhi apply nahi hota.
READ sim.countries SIM generator jin countries ko jaanta hai unhe list karein content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method sim.countries --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"code":"AF","country":"Afghanistan"},{"code":"AL","country":"Albania"},...,{"code":"GB","country":"United Kingdom"},...,{"code":"US","country":"United States"},...], ok=true}] Sirf woh countries list hoti hain jinka database mein kam se kam ek carrier hai, naam ke hisaab se sorted. code uppercase ISO 3166-1 alpha-2 value hai jo simCountries expect karta hai; country English naam hai jaisa store hai ("United Kingdom", "United States").
READ device.templates Device templates list karein — built-in aur imported content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method device.templates --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"id":"asus|ASUS_AI2401|AI2401_A","manufacturer":"asus","label":"ROG Phone 8","isCustom":false},...,{"id":"custom:samsung|e3qxeea|SM-S928B","manufacturer":"samsung","label":"Galaxy S24 Ultra","isCustom":true}], ok=true}] Har template ke liye ek entry. id wahi hai jo deviceTemplate leta hai — brand|product|model, aur app mein import kiye gaye templates ke liye aage custom: laga hota hai (isCustom true); label marketing naam hai (ROG Phone 8); manufacturer bilkul waise hi rakha jaata hai jaise OEM likhta hai (asus, samsung, OnePlus), normalise nahi hota. custom: ids ke liye neeche transport note dekhein.
UPDATE profile.update Database se SIM cards aur/ya device generate karein content call / broadcast
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Profile id. |
simCountries | string[] | optional | 1–2 ISO alpha-2 codes ka JSON array, jaise ["US","GB"] — har SIM slot ke liye ek, kram se. content call ya broadcast. |
deviceTemplate | string | optional | random (ya khaali string) kisi bhi random template ke liye, built-in ya imported; ya device.templates ki ek id. Built-in ids: content call ya broadcast. custom: ids: sirf broadcast. |
Request
broadcast — dono generators ek hi call mein (jaisa test kiya gaya)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e simCountries '["US","GB"]' -e deviceTemplate random content call — sirf simCountries, sirf slot 0 (single quotes zaroori hain)
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 'simCountries:s:["US"]' content call — ek random template
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 deviceTemplate:s:random content call — ek specific built-in template (single quotes zaroori hain: | shell ka pipe hai)
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 'deviceTemplate:s:asus|ASUS_AI2401|AI2401_A' broadcast — ek imported (custom:) template
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceTemplate 'custom:samsung|e3qxeea|SM-S928B' Response ok=true · full updated profile
Kisi bhi profile.update ki tarah poora updated profile lautata hai — generate hue sim.simCards aur deviceMock wahin response mein hote hain.
⚠️ Har call nayi values nikaalti hai: wahi simCountries dobara bhejne par naye numbers milte hain, aur deviceTemplate random har baar alag device par ja sakta hai. Sirf wahi key bhejein jise dobara generate karwana hai.
simCountries
- Format. ISO 3166-1 alpha-2 codes ka ek JSON array —
["US","GB"], case se farq nahi padta. Position hi slot hai: pehla code slot0bharta hai, doosra slot1. Jo JSON array na ho, khaali array, koi blank entry, do se zyada entries, ya aisa code josim.countrieslist nahi karta — in sab parBAD_REQUESTmilta hai — teesra code reject hota hai, kabhi chupchaap nahi hataaya jaata jaise teesrasimcard hataaya jaata hai. - Aapko kya milta hai. Har slot ke liye app apne database se us desh ka ek carrier chunta hai aur haath se likhe
simblock ka har field bhar deta hai:carrierName,countryIso,mcc,mnc,operatorCode, desh ke dialling code ke saath ek valid E.164 mobilephoneNumber(US ke liye+1…), us carrier ke MCC+MNC se shuru hone waaleiccidaurimsi, aurLTE,NR 5G,WCDMAaurGSMmein se random chuna gayanetworkType. Phir wohsim.enabledkotrueset karta hai aur save kar deta hai. - Ye poore SIM block ko replace kar deta hai.
simki tarah, result do cards par normalise hota hai:["US"]slot0bharta hai aur slot1khaali chhod deta hai, chahe usme pehle kuch bhi ho.
deviceTemplate
random(ya khaali string) — app apne saare templates mein se ek chunta hai, built-in aur imported dono. Khaali aur absent ka farq dhyaan mein rakhein:-e deviceTemplate ""ka matlab random hai, jabki key ko poori tarah chhod dene par device jyon ka tyon rehta hai.- Ek template id
device.templatesse — har baar wahi device. Built-in idsbrand|product|modelhoti hain, jaiseasus|ASUS_AI2401|AI2401_A; app mein import kiye gaye templates ka roop wahi hai, bas aagecustom:laga hota hai, jaisecustom:samsung|e3qxeea|SM-S928B. Jo id list mein nahi hai usparBAD_REQUESTmilta hai. - Aapko kya milta hai. Template se bhara hua har
deviceMockfield,deviceMock.enabledtruepar set, aur profile save.
Kaunsa transport
Colon ka wahi purana niyam lagta hai. sim.countries, device.templates, simCountries aur built-in template ids mein koi : nahi hota, isliye content call unhe le jaata hai. Jab bhi value mein |, [, ] ya " ho, use single quotes mein rakhein — yaani har simCountries array aur har template id. Bina quotes ke device ka shell | ko pipe samajh leta hai aur content chalne se pehle hi fail ho jaata hai (sh: e3qxeea: not found, exit 127). Custom id custom: se shuru hoti hai, aur woh extra colon --extra ke key:type:value roop ko tod deta hai: content tool khud use [ERROR] Binding not well formed ke saath reject kar deta hai aur request app tak pahunchti hi nahi — pakadne ke liye koi BAD_REQUEST hai hi nahi. Custom ids HEADLESS_UPDATE broadcast se bhejein; call mein aur kuch nahi badalta.
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 27) | ✅ 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 — ya iski jagah deviceTemplate bhejein aur app se bharwa lein (1.5.9+) |
| sim | ❌ OFF | "enabled":true shaamil karein — ya iski jagah simCountries bhejein aur app se bharwa lein (1.5.9+) |
| gmails | empty | Addresses bhejein (virtual accounts default se on rehte hain) |
⚠️
enabled:falsewaala config store to hota hai par inert rehta hai — values save ho jaati hain taaki aap baad mein isse on kar sakein, lekinenabled:truehone tak kuch spoof nahi hota.geoiska apvaad hai: usmeenabledswitch hai hi nahi.hook_geo_*flags tab bhi lagte hain jabgeose koi kaam ki location nikal aaye — chahesource: CUSTOMse, ya aise proxy se joenabled:trueho 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 26 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_sensor_gyroscope | Gyroscope spoof karein (hook_realistic_sensor chahiye). App 1.6.3+ chahiye. |
hook_sensor_light | Ambient light sensor spoof karein (hook_realistic_sensor chahiye). App 1.6.4+ chahiye. Light environment preset (Indoor, On the move, Outdoors, Night / dark) sirf app mein chuna ja sakta hai; Headless API se banaya gaya profile Indoor se shuru hota hai, aur Headless API se update karne par pehle se chuna preset waise ka waisa rehta hai. App 1.6.9 se reading din ke local time (raat, shaam, din; timezone spoofing on ho to profile ka timezone) ko bhi follow karti hai, aur jab proximity sensor near report kare (jaise phone kaan se lagaya ho) to kaafi gir sakti hai. |
hook_sensor_magnetometer | Magnetometer (compass) spoof karein, uncalibrated sensor samet (hook_realistic_sensor zaroori). Magnetic field profile ke spoofed coordinates ke hisaab se nikala jaata hai aur accelerometer aur gyroscope wali same device orientation ke saath ghoomta hai. Profile location na ho to har profile ke liye ek plausible fixed field use hota hai. Sirf tab lagta hai jab hook_sensor_accelerometer bhi on ho. App 1.6.9+ chahiye. |
hook_sensor_fused | Fusion sensors spoof karein: gravity, linear acceleration, rotation vector, game rotation vector, geomagnetic rotation vector aur orientation, sab ek hi simulated motion se nikalte hain (hook_realistic_sensor zaroori). Gravity, linear acceleration aur game rotation vector ke liye hook_sensor_accelerometer aur hook_sensor_gyroscope on hone chahiye; rotation vector, geomagnetic rotation vector aur orientation ke liye hook_sensor_magnetometer bhi. App 1.6.9+ chahiye. |
hook_sensor_pressure | Barometer spoof karein (hook_realistic_sensor zaroori). Air pressure profile ki spoofed location ki altitude follow karta hai (wahi altitude jo Location.getAltitude() deta hai), saath mein dheema weather drift. Sirf tab kaam karta hai jab profile ke paas geo ho (proxy geo ya custom location) aur hook_geo_gps on ho. App 1.6.9+ chahiye. |
hook_sensor_roster | Sensor list aur har sensor ka metadata (naam, vendor, range, resolution, power, minDelay) simulated device se match karein (hook_realistic_sensor zaroori). Sirf tab kaam karta hai jab Device Simulation (deviceMock.enabled) on ho. Simulated device mein na hone wale sensors chhupata hai; asli device mein na hone wale sensors kabhi nahi jodta. App 1.6.9+ 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 — 1–65535, 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 |
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: CUSTOMpoora hona chahiye: coordinates jo0/0na hon aur range mein hon, 2-lettercountryCode, aurtimezone. Inme se ek bhi chhoot gaya to callBAD_REQUESTdeta 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.
🛑
timezonehi 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/Tokyoojaisi typo accept ho jaati hai,ok=truedeti hai,profile.getuse 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 turantBAD_REQUESTke saath fail hoti hai.
CUSTOM — location khud set karein, proxy ki zaroorat nahi
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)
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. 1.5.9+ par aap ye poora block chhod kar iski jagah deviceTemplate bhej sakte hain — random app ke apne database se ek random device chunta hai, aur device.templates ka koi id ek khaas device chunta hai — app har field bhar deta hai aur use aapke liye enable kar deta 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 |
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"}' Ya phir, 1.5.9+ par, app ko apne database se ek random device chunne dein — bilkul bina JSON ke (random built-in aur imported dono templates mein se chunta hai; ek khaas device ke liye iski jagah device.templates ka id daalein):
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 deviceTemplate:s:random 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. 1.5.9+ par aap ye poora block chhod kar iski jagah simCountries bhej sakte hain — app har slot ke liye asli carrier data generate karta hai aur use aapke liye enable kar 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 kiNR 5Gmein space hai:NR5Gpehchaana nahi jaata aur seedha isi khaamosh gadde mein gir jaata hai.
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"}]}' Ya phir, 1.5.9+ par, app ko country codes se dono cards generate karne dein — bilkul bina JSON ke (slot 0 ko pehla code milta hai, slot 1 ko doosra; ek hi code sirf slot 0 bharta hai):
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 'simCountries:s:["US","GB"]' 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:
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
Ek profile zero se active tak, ek baar mein ek step. Step 5, 6 aur 7 mein se har ek mein ek hi nateeje tak pahunchne ke kai raaste hain — har step mein ek chunein; tabs unke beech switch karte hain. Har command uske adb shell roop mein dikhaayi gayi hai. Aakhir mein, do recipes poore sequence ko ek hi copy-karo-aur-chalao block mein samet dete hain, aur Troubleshooting mein wahi cheez on-device script ke roop mein hai.
Ek nazar mein
- 01 Check karein ki API taiyaar hai
- 02 Profile banayein
- 03 Target apps jodein
- 04 Virtual Gmail accounts jodein
- 05 Device identity chunein
- 06 SIM cards chunein
- 07 Network aur location
- 08 Hook flags tune karein
- 09 Jaane waale profile ka backup lein
- 10 Activate karein
- 11 Verify karein
- 12 Baad mein: clone, stop, remove
Neeche istemaal hue placeholders
<your_access_token>— Settings → Developer → Headless API waali key<profile_id>— woh id jo step 2 lautata hai<active_profile_id>/<job_id>— sirf step 9 ke liye,statusaurbackup.startse
Baaki sab se pehle ek read. Ye batata hai ki Premium, feature switch aur license freshness — teeno theek hain ya nahi; yahi teen cheezein hain jin par har doosra call atka hota hai.
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token>
# expect "premium":true, "featureEnabled":true, "freshnessOk":true
# anything else: fix that first — see Status and Error codes above Baaki sab kuch us id par tika hai jo ye lautata hai. Naya profile har hook flag ON ke saath shuru hota hai (hook_spoof_uptime ko chhod kar), bina kisi target app ke, aur proxy, deviceMock aur sim teeno OFF.
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo
# → Bundle[{data={"id":"a1b2c3d4-..."}, ok=true}]
# copy that id — it is <profile_id> in every command below Sirf is list ke apps spoof hote hain. Har ek ko package name se jodein; jo list mein nahi hai, use asli device hi dikhta rehta hai.
# one call per app — the package name, not the display name
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
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.instagram.android
# check the list (adding the same package twice returns BAD_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> Woh addresses jo target apps ko signed-in Google accounts ke roop mein dikhenge. Iske liye hook_virtual_accounts chahiye, jo default se ON hai. Ise chhod dein to apps ko koi Google account dikhta hi nahi.
# @gmail.com only; the list replaces the previous one, [] clears it
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]"]' Ek hi nateeje ke teen raaste — enabled:true waala ek deviceMock block. App se device roll karwa lein, koi template naam lein, ya har field khud likhein.
# 1.5.9+ — one call, no JSON: the app rolls a device from its database
# (built-in and imported templates alike) and switches deviceMock on for you
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 deviceTemplate:s:random # 1.5.9+ — first see what is available; "id" is what you send back
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method device.templates --extra token:s:<your_access_token>
# → [{"id":"asus|ASUS_AI2401|AI2401_A","manufacturer":"asus","label":"ROG Phone 8","isCustom":false}, ...]
# built-in id → content call works — single quotes are REQUIRED, | is a shell pipe
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 'deviceTemplate:s:asus|ASUS_AI2401|AI2401_A'
# imported (custom:) id → broadcast ONLY; the extra colon breaks content call
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceTemplate 'custom:samsung|e3qxeea|SM-S928B' # any version — write every Build field yourself; "enabled":true is the switch
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"}' A aur B ke liye app 1.5.9+ chahiye aur ye kabhi C ke saath ek hi call mein nahi jaate. Ek ke baad doosra chalana theek hai — aakhri call hi maani jaati hai, aur A / B har baar chalne par nayi values roll karte hain.
sim ke liye bhi wahi soch: country codes se cards generate karein, ya dono cards khud likhein. Dono tarah se profile mein aakhir mein theek do slots hote hain.
# 1.5.9+ — see which countries the generator knows ("code" is what you send)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method sim.countries --extra token:s:<your_access_token>
# → [{"code":"AF","country":"Afghanistan"}, ..., {"code":"GB","country":"United Kingdom"}, ..., {"code":"US","country":"United States"}, ...]
# two cards: slot 0 = US, slot 1 = GB — carrier, number, ICCID, IMSI all generated
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 'simCountries:s:["US","GB"]'
# or a single card — slot 1 is left empty
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 'simCountries:s:["US"]' # any version — two cards, every field yourself; a third card is dropped silently
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"}]}' # 1.5.9+ — device (step 5) and SIM (step 6) in ONE broadcast: validated together, saved together
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e simCountries '["US","GB"]' -e deviceTemplate random A aur C ke liye app 1.5.9+ chahiye. Ek hi call mein sim aur simCountries dono bhejna BAD_REQUEST hai. C atomic hai — galat template id se poora call fail hota hai aur SIM bhi apply nahi hota.
Traffic kahaan jaata hai aur device khud ko kahaan batata hai — ye do alag settings hain. proxy traffic ko route karta hai aur, default se, location bhi wahi deta hai; source: CUSTOM waala geo location haath se set karta hai aur use proxy ki bilkul zaroorat nahi. Ye step chhod dein to profile asli IP aur asli location hi rakhta hai.
# the proxy is tested live (device needs internet, up to ~8s);
# one that fails returns PROXY_INVALID and is not saved
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"}'
# with auth: add "username":"…","password":"…" — never echoed back by profile.get
# location follows the proxy by default; this line only matters if geo was CUSTOM before
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"}' # no proxy at all — the location is yours; coordinates, countryCode and timezone are all required
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"}'
# timezone is NOT validated: a typo silently becomes GMT — copy the IANA name exactly # traffic through the proxy, GPS / timezone / locale from your own values —
# a deliberate mismatch (IP in one country, GPS in another); geo.source decides what the hooks use
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"}'
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 waale profile ko ek baar system ka VPN consent chahiye, jo app ki Headless API screen se diya jaata hai — iske bina activation to safal hota hai, lekin proxy connect nahi hoga aur call INTERNAL lautata hai.
hook_spoof_uptime ko chhod kar har flag pehle se ON hai, isliye zyadatar profiles ye step chhod dete hain. Ise sirf tab karein jab kuch khaas hooks band karne hon, ya uptime spoofing chalu karni ho. Kyunki update poora map replace kar deta hai, pehle use padhein aur poora wapas bhejein.
# every flag is already ON (except hook_spoof_uptime), so most profiles skip this step.
# an update REPLACES the whole map — read it first, then send it back complete:
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id>
# example: Wi-Fi + Bluetooth spoofing off, uptime spoofing on, everything else at its default
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_hide_dev_opts":true,"hook_hide_vpn":true,"hook_hide_airplane_mode":true,"hook_hide_proxy":true,"hook_hide_root":true,"hook_hide_lsposed":true,"hook_spoof_installer":true,"hook_package_info":true,"hook_lan_scan_block":true,"hook_identifiers_partly":true,"hook_identifiers_fully":true,"hook_wifi":false,"hook_nearby_wifi":true,"hook_nearby_bluetooth":false,"hook_realistic_sensor":true,"hook_sensor_accelerometer":true,"hook_sensor_gyroscope":true,"hook_sensor_light":true,"hook_sensor_magnetometer":true,"hook_sensor_fused":true,"hook_sensor_pressure":true,"hook_sensor_roster":true,"hook_spoof_uptime":true,"hook_virtual_accounts":true,"hook_geo_gps":true,"hook_geo_locale":true,"hook_geo_timezone":true}' Bas yahi ek safety net hai: naya profile activate karne se target apps ka data wipe ho jaata hai. Agar jo profile abhi active hai usme aise sessions ya data hain jo rakhne laayak hain, to switch karne se pehle uska backup le lein. Dono *.start calls sirf active profile par kaam karte hain.
# activating wipes the target apps' data — if the CURRENTLY active profile has anything worth keeping, save it first
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token>
# → "activeProfileId" is the profile to back up
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.start --extra token:s:<your_access_token> --extra id:s:<active_profile_id>
# → {"jobId":"f0e1d2c3-...", "type":"backup", ...} — poll until "state" is DONE (or FAILED):
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.job --extra token:s:<your_access_token> --extra jobId:s:<job_id>
# later, once that profile is active again, pour it back:
# adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method restore.start --extra token:s:<your_access_token> --extra id:s:<active_profile_id> Yahi woh pal hai jab identity live hoti hai. Pehle jo bhi profile active tha woh aapke liye apne aap deactivate ho jaata hai — pehle profile.deactivate call karne ki zaroorat nahi.
# force-stops every target app, CLEARS ITS DATA, and brings it back with the new identity.
# no confirmation dialog — this comment is the only warning you get
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>
# → Bundle[{data={"id":"a1b2...","isActive":true}, ok=true}]
# BUSY? a backup / restore job still holds the slot — retry until it stops Profile ko wapas padhein aur confirm karein ki hooks kya istemaal karenge: enabled:true waale generated ya haath se likhe blocks, proxy apne live-test output ke saath, aur geo jo aapke chune hue source ki taraf ishaara kar raha ho.
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id>
# → "isActive":true, "deviceMock":{"enabled":true,...}, "sim":{"enabled":true,"simCards":[...]}, "proxy":{...}, "geo":{...}
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token>
# → "activeProfileId":"<profile_id>" Profile taiyaar hai. Aage aapko yahi calls chahiye honge.
# a second identity with the same settings — device re-rolled, SIM numbers regenerated, name generated
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.duplicate --extra token:s:<your_access_token> --extra id:s:<profile_id>
# stop spoofing (no id needed — it deactivates whichever profile is active)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token>
# delete the profile — its backups under /sdcard/HideMyAndroid_Backups/ go with it
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> Do poori recipes
Upar ke steps, har ek ek hi copy-karo-aur-chalao block mein sameta hua. A 1.5.9+ par sabse chhota raasta hai; B generator aur proxy dono se poori tarah bachta hai aur 1.4.5+ par chalta hai. Dono mein pehle command ke baad <profile_id> badal dein.
Recipe A — sab kuch generated
Random device, US + GB ke SIM cards, traffic aur location proxy ke through. Saat commands.
# Recipe A — everything generated (app 1.5.9+). The shortest path to a working profile.
# 1. create — 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. 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. virtual Gmail account
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]"]'
# 4. device + SIM in one call — a random device, slot 0 US, slot 1 GB (both enabled and saved)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e simCountries '["US","GB"]' -e deviceTemplate random
# 5. proxy — tested live (~8s); the location follows 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 proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}'
# 6. activate — clears the target app's 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>
# 7. 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> Recipe B — sab kuch haath se
Har Build field, har SIM field aur location aapki likhi hui; na proxy, na generator.
# Recipe B — everything by hand (app 1.4.5+). No generator, no proxy: you control every value.
# 1. create — 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. 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. 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. device — every Build field yourself
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. SIM — two cards, every field yourself
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. location — custom, no proxy (all four fields required; timezone is not validated)
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"}'
# 7. activate — clears the target app's 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>
# 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> 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, koi duplicate app na ho, packages profile ke hi hon, aur country code / template id wahi ho jo discovery calls list karti hain — ye check karein; aur ek hi call mein kabhi sim ke saath simCountries ya deviceMock ke saath deviceTemplate na bhejein |
NOT_FOUND | Woh profile, job ya backup maujood nahi hai | profile.list, backup.job ya backup.list se id confirm karein |
BUSY | Koi backup / restore job abhi bhi slot pakde hue hai | error_message mein chal rahi jobId hoti hai — job khatam hone ka intezaar karein, phir retry karein; cancel ke baad slot CANCELLED state ke baad bhi tika reh sakta hai, isliye tab tak retry karein jab tak BUSY aana band na ho jaaye. Jab tak koi job slot pakde hue hai, profile.setActive / deactivate / delete bhi yahi lautate hain |
REQUIRES_ACTIVE_PROFILE | backup.start / restore.start aise profile par jo active nahi hai | Pehle use profile.setActive karein — koi override flag nahi hai |
NO_BACKUP | restore.start ko maange gaye app ka koi backup nahi mila (ya profile ke paas ek bhi nahi hai) | backup.list check karein; pehle backup.start chalayein |
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.hidemyandroidshaamil kiya hai — iske bina Android broadcasts block kar deta hai. - Koi value
:ke baad kat gayi? Us value mein colon hai, isliyecontent callne usse truncate kar diya. IsseHEADLESS_UPDATEbroadcast ke through bhejein. - JSON broadcast apply nahi ho raha (aksar Windows par)? Desktop shell aur device shell, dono mein
am broadcastJSON (hookFlags,proxy,deviceMock,sim) ke quotes aasaani se hat jaate hain, jisseamvalue ko galat padh leta hai (ho sakta hai wohdat=…data URI ban jaaye) aur kuch nahi badalta. Pakka tareeka ye hai ki JSON ko command line se bahar rakhein — poore workflow ko ek.shfile 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:bashphir usse device par push karke chalayein:# setup.sh — Recipe A from 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. device + SIM generated from the database (1.5.9+): random device, slot 0 US, slot 1 GB am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e simCountries '["US","GB"]' -e deviceTemplate random # Recipe B alternative (any version) — write both blocks yourself instead: # 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"}' # 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"}]}' # 5. enable + set the proxy (tested live, ~8s) — the location follows it 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"}' # Or skip the proxy and set the location yourself (use INSTEAD of the proxy line, 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"}' # 6. activate (restarts the target app and clears its data) content call --uri $URI --method profile.setActive --extra token:s:$K --extra id:s:$ID # 7. verify content call --uri $URI --method profile.get --extra token:s:$K --extra id:s:$IDbashPlainadb push setup.sh /data/local/tmp/setup.sh adb shell sh /data/local/tmp/setup.shcontent callcommands (bina JSON ke) bina script ke seedha type kiye ja sakte hain. Git Bash mein,adblines ke aageMSYS_NO_PATHCONV=1lagayein 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. - Jis job ko aap cancel kar chuke hain usse
BUSY?backup.canceljob ko turantCANCELLEDkar deta hai (aurfinishedAtbhi set kar deta hai), lekin usne jotarshuru kiya tha woh roka nahi ja sakta aur chalta rehta hai, isliye slot pakda hi rehta hai. Slot busy hote hue bhibackup.jobCANCELLEDdikhata hai, aur koi field slot report nahi karta —CANCELLEDko “slot khaali” na samjhein; basprofile.setActive/deactivate/deleteko tab tak retry karein jab tak wohBUSYlautana band na kar dein. (Jo job apne aapDONEyaFAILEDpar khatam hoti hai woh slot lagbhag turant chhod deti hai.) - Seedha
device.templatesse copy ki gayi template id parBinding not well formed? Imported templates ki idscustom:se shuru hoti hain, aur woh colon--extrakekey:type:valueroop ko tod deta hai —contenttool[ERROR] Binding not well formedaur apna usage text print karta hai aur request app tak pahunchti hi nahi. Iski jagah useHEADLESS_UPDATEbroadcast se bhejein (-e deviceTemplate 'custom:…'). Built-in ids (brand|product|model) mein colon nahi hota aur woh dono transport par chalti hain — lekin unhe single quotes mein rakhein, warna shell|ko pipe samajh leta hai (sh: e3qxeea: not found) aur kuch bheja hi nahi jaata.