Legacy update check (deprecated)
const url = 'https://api.aetherpush.com/updateCheck?deploymentKey=example&platform=ios';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.aetherpush.com/updateCheck?deploymentKey=example&platform=ios'Legacy CodePush SDK path. Equivalent semantically to
/v0.1/public/codepush/update_check but returns response fields
in camelCase instead of snake_case. When the tenant is
throttled, updateInfo includes throttleHours, the same signal
the snake_case routes return as throttle_hours.
Kept for backward compatibility with react-native-code-push@<7.
New SDK clients should use the snake_case path.
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Binary version of the installed app (semver). Missing or empty
answers 200 with isAvailable false, same as an unresolved
deployment key.
Responses
Section titled “Responses”Update info, with camelCase field names. isAvailable: false
means no update was selected for this device: it already runs
the latest eligible release, nothing targets its binary version,
every enabled release covering it is an older range outranked by
a newer release that targets exactly its binary version (enabled
or not), its deployment key did not resolve, the deployment was
deleted after the key was resolved, or the release’s download URL could
not be re-signed for a reason retrying will not fix, such as a
blob the storage provider no longer holds. A device outside a
staged rollout receives the eligible non-rollout fallback;
unavailable follows only when that fallback is not eligible. A
database failure while refreshing that URL answers 503 instead.
Wrapper with updateInfo field. Field names within
updateInfo are camelCase (appVersion, downloadURL,
isAvailable, etc.). See the legacy CodePush SDK for the
full shape. When the tenant is throttled this object
also includes throttleHours.
object
Example generated
{}Headers
Section titled “Headers”Present on legacy acquisition endpoints. Signals the endpoint is
deprecated in favor of its canonical /v1/public/aether/* successor.
The value is the string true.
Example
trueRFC 8288 link header with two link values: the canonical successor endpoint via rel=“successor-version”, and the CodePush migration guide via rel=“deprecation”.
Example
</v1/public/aether/update_check>; rel="successor-version", <https://docs.aetherpush.com/migration/codepush/>; rel="deprecation"Present on an update check only when a free tenant’s monthly active
device count is at or above its quota. The one current value is
over_quota_throttled. The body then also carries throttle_hours
on the snake_case routes, or throttleHours on legacy /updateCheck.
The deployment key resolved, but appVersion is present,
non-empty, and does not conform to semver after the integer
and missing-patch expansions this endpoint accepts. A missing
or empty app version, and a key that does not resolve
(malformed or unknown), answer 200 with isAvailable false
instead.
Standard error envelope. code is the stable machine identifier for
client branching and i18n. The wording of error is a human-readable
fallback and is not part of the contract. Specialized responses keep
narrower code enums where clients already branch on them.
object
Human-readable error message.
Stable machine code. Prefer this over matching on error. The
values this API can answer with are listed in the ApiErrorCode
schema of the raw document at
https://api.aetherpush.com/openapi.yaml. The field stays an
open string here so that a release adding a value does not
invalidate this response.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "code": "not_found", "requestId": "req_abc123"}The request did not arrive through the trusted edge. This endpoint is unauthenticated; 403 is that refusal, not a missing bearer token.
Standard error envelope. code is the stable machine identifier for
client branching and i18n. The wording of error is a human-readable
fallback and is not part of the contract. Specialized responses keep
narrower code enums where clients already branch on them.
object
Human-readable error message.
Stable machine code. Prefer this over matching on error. The
values this API can answer with are listed in the ApiErrorCode
schema of the raw document at
https://api.aetherpush.com/openapi.yaml. The field stays an
open string here so that a release adding a value does not
invalidate this response.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "Forbidden", "code": "forbidden", "requestId": "req_abc123"}The request failed for a reason the server does not classify
as retryable, so it carries no Retry-After. A database
failure the server recognises answers 503 above instead, and a
download URL that cannot be re-signed answers 200 with
isAvailable false, described above.
Everything else answers here, a Redis failure and a defect
alike, so this status is not by itself evidence of either.
Standard error envelope. code is the stable machine identifier for
client branching and i18n. The wording of error is a human-readable
fallback and is not part of the contract. Specialized responses keep
narrower code enums where clients already branch on them.
object
Human-readable error message.
Stable machine code. Prefer this over matching on error. The
values this API can answer with are listed in the ApiErrorCode
schema of the raw document at
https://api.aetherpush.com/openapi.yaml. The field stays an
open string here so that a release adding a value does not
invalidate this response.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "code": "not_found", "requestId": "req_abc123"}A database read this request depends on could not be
completed, so no update decision was made. Retryable:
Retry-After carries the seconds to wait. All three of the
request’s reads answer this way: resolving the deployment
key when nothing is cached for it, reading that deployment’s
releases, and refreshing the download URL of a release the
deployment would serve, which covers the staged-rollout
candidate as well as the current one, so a failure on either
answers this way for every device whose response is not already
cached. Whichever of the three an outage
reaches, the status is the same, so it no longer depends on
which of them the server had cached, and a device is never
told it is up to date because the server could not reach its
database.
Returned with HTTP 503 when the server could not complete an
operation for a reason it expects to pass, and says so rather than
answering as though it had. On the management API, a release or
deployment write could not finish because of database contention
(lock wait expired, deadlock, or a serialization failure) and
nothing was written, or a release
upload could not read back the package it had just stored in order
to sign its URL. On the
acquisition endpoints, a database read the request depends on
could not be completed: resolving a deployment key with nothing
cached for it, reading that deployment’s releases, or refreshing
the download URL of the release it would serve. The release and
download-URL reads answer this way for the failures the server
recognises as transient, and the deployment lookup answers this
way for any failure it cannot serve from a cached entry, so an
outage no longer produces a different status depending on which
of them it reached.
retryAfterSeconds is the minimum interval before a
retry is useful for the path that failed, and is also sent as the
Retry-After response header. Management lock-contention 503s use
the commit lock wait; acquisition and other transient-read 503s use
the deployment-cache failure grace. Those intervals are independent
and can differ. code is connection_failed on every response this
schema describes, management lock contention included. The operation
and the message are what distinguish the paths.
object
Example
{ "error": "This release could not finish because another release was committing to the same deployment. No release was created. Please try again.", "code": "connection_failed", "retryAfterSeconds": 5, "requestId": "req_abc123"}Headers
Section titled “Headers”Seconds to wait before retrying.