Skip to content

gplay recovery create

Create a DRAFT app recovery action targeting users impacted by a bad APK versionCode. A draft is staged but NOT yet pushed to any user — activate it later with gplay recovery deploy <id> (which requires --confirm).

Pass --version-code (the bad version) and at least one audience selector: --all-users, --regions <CC,CC>, or --sdk-levels <N,N>. The recovery uses a remote in-app update by default (--remote-in-app-update).

A draft is harmless, so create needs no --confirm; use --dry-run to validate inputs without any HTTP call. GPLAY_READONLY still refuses it (exit 4).

[experimental] — the surface may still evolve (ADR-0010).

gplay recovery create [flags]
FlagDescription
--all-userstarget all users on the bad versionCode
--dry-runvalidate inputs and resolve the target without any HTTP call
--output stringoutput format: table, json, or markdown (default: auto — table on TTY, json in pipes/CI)
--package stringAndroid package name (overrides .gplay/config.json pin)
--regions stringstarget users in these CLDR region codes (e.g. US,FR)
--remote-in-app-updateuse a remote in-app update (the only recovery type Play models today) (default true)
--sdk-levels int64Slicetarget users on these Android SDK levels (e.g. 30,31) (default [])
--version-code intthe bad APK versionCode the recovery targets (required)
FlagDescription
--account stringname of a stored Account to use (overrides env and active Account)
--retry intretry transient failures (transport errors, 5xx, 429) up to N times with exponential backoff (default: 0, no retry)
--service-account stringpath to a service-account JSON, or inline JSON content (overrides --account, env, and active Account)
--timeout durationper-request API timeout, e.g. 30s or 2m (default: 60s for control-plane calls, none for uploads)
-v, --verboselog flow steps to stderr (info level)