gplay customapps create
Create a private app distributed to one organisation through managed Google Play, uploading the AAB/APK with the custom app's metadata in a single call. This is the one Google Play Developer API path that creates an app record (public apps can only be created in the Play Console).
The app is created on the Developer account (the account axis, not a package): resolve the account through the gplay cascade (later wins) — the active Account's developer-id, .gplay/config.local.json, GPLAY_DEVELOPER_ID, then --developer-id; an unresolved id fails with exit 10.
Pass --title, --default-language (BCP 47, e.g. en-US), and the artifact path. Restrict the app to specific organizations with a repeatable --organization <organizationId> (omit to default to the organization linked to the account).
Creating a custom app is IRREVERSIBLE — the API exposes no delete (and no read), so the app permanently occupies the account. It therefore requires --confirm (missing → exit 3); CI=true never auto-confirms. Rehearse first with --dry-run (validates inputs and the artifact with zero HTTP). The account must be enrolled in managed Google Play and the service account must hold the account-level CAN_CREATE_MANAGED_PLAY_APPS capability; a 403 names both.
--output json passes the created CustomApp through verbatim (including the output-only packageName). GPLAY_READONLY refuses the live write (exit 4).
[experimental] — the surface may still evolve (ADR-0010).
gplay customapps create <app.aab|app.apk> [flags]| Flag | Description |
|---|---|
--confirm | authorize the irreversible app creation |
--default-language string | default listing language in BCP 47 (e.g. en-US) (required) |
--developer-id string | Play Console Developer account id (overrides the active Account's, env, and project-local) |
--dry-run | validate inputs and the artifact without any HTTP call (reports the --confirm requirement) |
--organization stringArray | restrict to this organization id (repeatable; omit to default to the account's organization) |
--output string | output format: table, json, or markdown (default: auto — table on TTY, json in pipes/CI) |
--title string | the custom app's display title (required) |
Global flags
Section titled “Global flags”| Flag | Description |
|---|---|
--account string | name of a stored Account to use (overrides env and active Account) |
--retry int | retry transient failures (transport errors, 5xx, 429) up to N times with exponential backoff (default: 0, no retry) |
--service-account string | path to a service-account JSON, or inline JSON content (overrides --account, env, and active Account) |
--timeout duration | per-request API timeout, e.g. 30s or 2m (default: 60s for control-plane calls, none for uploads) |
-v, --verbose | log flow steps to stderr (info level) |