Skip to content

Legacy update check (deprecated)

Deprecated
GET
/updateCheck
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.

deploymentKey
required
string
appVersion
string

Binary version of the installed app (semver). Missing or empty answers 200 with isAvailable false, same as an unresolved deployment key.

packageHash
string
clientUniqueId
string
isCompanion
string
label
string
platform
string
Allowed values: ios android
osVersion
string
reactNativeVersion
string
/^[0-9]{1,3}\.[0-9]{1,3}$/
sdkVersion
string
/^[0-9A-Za-z.+-]{1,32}$/

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.

Media typeapplication/json

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
key
additional properties
any

Example generated

{}
Deprecation
string

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
true
Link
string

RFC 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"
X-Aether-Mad-Status
string
Allowed values: over_quota_throttled

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.

Media typeapplication/json
Error

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
error
required

Human-readable error message.

string
code
required

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.

string
requestId

Unique identifier for the request, also exposed as the X-Request-Id response header.

string

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.

Media typeapplication/json
Error

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
error
required

Human-readable error message.

string
code
required

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.

string
requestId

Unique identifier for the request, also exposed as the X-Request-Id response header.

string

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.

Media typeapplication/json
Error

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
error
required

Human-readable error message.

string
code
required

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.

string
requestId

Unique identifier for the request, also exposed as the X-Request-Id response header.

string

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.

Media typeapplication/json

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
error
required
string
code
required
string
retryAfterSeconds
required
integer
>= 1
requestId
string

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"
}
Retry-After
integer

Seconds to wait before retrying.