The update lifecycle
This page follows one update from the server’s point of view. The endpoints live under /v1/public/aether/ and need no authentication; the deployment key in the query identifies the channel.
1. Check
Section titled “1. Check”On app start (by default), the SDK calls update_check with the deployment key, the binary version, and the hash of the package it currently runs. The server answers with update_info:
is_available: falsewhen the device already has the latest eligible release, is outside a staged rollout, or nothing targets its binary version.is_available: trueplusdownload_url,package_hash,is_mandatory,package_size, and the release metadata when there is something to install.update_app_version: truewhen the newest release targets a newer binary than the device runs, meaning the fix ships through the app store, not over the air.
2. Download and install
Section titled “2. Download and install”The SDK downloads the bundle, verifies it, and installs it according to the configured install mode: immediately, on the next restart, or on the next resume. It reports the download through report_status/download, which feeds the per-release download counter.
3. Confirm or roll back
Section titled “3. Confirm or roll back”After the new bundle runs, the SDK confirms it with the server through report_status/deploy. A crash before that confirmation triggers the SDK’s automatic per-device rollback: the device returns to its previous bundle and reports the deployment as failed. These reports are the DeploymentSucceeded and DeploymentFailed numbers in aether deployment history and the metrics endpoint. A failure spike right after a release is the signal to roll back server-side.
Device counting
Section titled “Device counting”Every update_check also counts the device toward your monthly active devices (MAD), using a HyperLogLog sketch per tenant and calendar month. On the free plan, going over the MAD quota throttles update checks: devices are told to retry 48 hours later and the response carries X-Aether-Mad-Status: over_quota_throttled. Details in Plans, quotas, and MAD.
Legacy paths
Section titled “Legacy paths”The same three endpoints also exist under the deprecated CodePush-compatible paths (/v0.1/public/codepush/*, /updateCheck, /reportStatus/*). Those responses carry Deprecation: true and a Link header with rel="successor-version" pointing at the canonical path.