Skip to main content

Private App Rollouts

📄️Create an app rollout

Plans a staged rollout of a private APK to a Companion-enabled policy's devices, snapshotting the audience and each stage's device count. With dry_run the would-be rollout is returned with status draft and an empty id, and nothing is stored or changed. With start the rollout is started in the same call, which adds the APK to the policy and pushes the policy to Google; if starting fails the rollout stays a draft and the START_FAILED refusal carries it in details.rollout. With replaces_rollout_id the rollout is a forward fix for the devices the replaced rollout reached; a paused replaced rollout is cancelled in the same transaction that creates the fix (never on a dry run), and a running one is refused until it is paused. Refusals carry a stable error.code: INVALID_REQUEST, VALIDATION_ERROR, INVALID_STAGES, INVALID_GATES, INVALID_TARGET, APP_NOT_FOUND, POLICY_NOT_FOUND, REPLACED_ROLLOUT_NOT_FOUND, POLICY_COMPANION_DISABLED, INVALID_REPLACEMENT, REPLACED_ROLLOUT_RUNNING (details.rollout), NO_TARGET_DEVICES, DEVICE_NOT_IN_POLICY, EMPTY_STAGE (details.stages, details.suggested_stages), WOULD_DOWNGRADE (details.devices), ROLLOUT_ALREADY_OPEN (details.rollout_id), AUDIENCE_CHANGED, START_FAILED. Requires androidnexus.policies:write.

📄️Advance an app rollout

Completes the active stage of a running rollout and activates the next one, or completes the rollout after its last stage. Only a running rollout advances; a draft starts with /start (INVALID_TRANSITION otherwise). A stage its gate still holds is refused with GATE_NOT_MET, carrying the rollout and its gate in details.rollout. When the stage's failure rate is above its maximum the rollout is paused instead and the answer is 200 with status paused and paused_reason failure_threshold. Requires androidnexus.policies:write.

📄️Retry failed devices in an app rollout

Gives each failed device a new install attempt. With device_ids, exactly those devices are retried and each must have failed in a stage the rollout has reached (DEVICE_NOT_RETRYABLE otherwise, with details.devices naming each device and why: not_in_rollout, stage_not_reached or not_failed). Omitted, every failed device in the reached stages is retried, and retried may be empty. Works on a running or paused rollout; retrying does not resume a paused one. Requires androidnexus.policies:write.