Errors
Every error code the hotcodepush CLI prints, from not_logged_in to bundle_too_large, with when it happens, what to do and its exit code.
Every error of the CLI is three lines on stderr: what happened, what to do, then this page's address with the code as the anchor.
An error the API answers carries its fix in the message, so it is two.
Under --json the same error is { "error": { "code", "message", "fix" } } on stdout, and the process exits with the code's exit class. --verbose prints the detail on stderr.
■ You are not logged in.
Run "hotcodepush login" or set HOTCODEPUSH_TOKEN.
https://hotcodepush.com/docs/cli/errors#not_logged_inErrors, warnings and notices share this shape, a symbol in the margin and the text beside it, red for an error, yellow for a warning, blue for a notice. A terminal without Unicode gets x, ! and •.
The CLI's own codes cover what happens before or without the API. An error the API answers passes through with its code and message unchanged, as API errors says.
The CLI's codes
bundle_too_large
A file, or the whole build, is above 512 MB, the size limit of every upload, checked before a byte moves.
Take the large media out of the web build. Exit 1.
command_failed
A command the CLI ran in the project failed: the package install, Cordova's plugin add, the build script, pod install, or the bundler of a React Native or Expo upload.
Run that command yourself and read its output, which the CLI also passed to stderr. Exit 1.
confirmation_required
A command that changes what devices receive, sends a mail or cannot be undone asked once, and nobody could answer: no terminal, CI set, or --no-input passed.
Pass --yes, or run the command in a terminal. Exit 4.
doctor_failed
doctor printed a failed check. The failed row carries its own message and manual step, and the code only sets the exit code.
Follow the row's manual step and run doctor again. Exit 1.
fingerprint_unavailable
The fingerprint comes from the lockfile and the installed packages. The recipe failed: no lockfile, two of them, no package.json, or a package missing from node_modules.
Give the project one lockfile, its package.json and a complete install. The fix line names what is missing. Exit 1.
invalid_json
A JSON file the CLI reads and a person edits does not parse: hotcodepush.json, package.json or config.json. The error names the file and where parsing stopped, never the file's text.
Fix the JSON at that position and run the command again. Exit 1.
invalid_parameter
A given value is wrong: it fails the flag's check, matches no resource or several, clashes with another flag, or names a missing file.
The fix line says which value to change, and --help lists the command's options. Exit 2.
login_denied
The person on the device-authorization page declined the code.
Start hotcodepush login again and approve the code. Exit 1.
login_expired
Nobody approved the login code before it ran out.
Start hotcodepush login again and approve the new code while it is valid. Exit 1.
missing_parameter
A required value is missing and the CLI could not ask for it: no terminal, CI set, or --no-input or --yes passed, as Global options defines it.
Pass the flag the error names, or run the command in a terminal to be asked for it. Exit 2.
native_project
A native project file init cannot edit: the line its edit replaces or follows is missing, or the file is not the framework template's. An Expo app config written as code raises it too.
Make the edit by hand. The fix line carries the step for that file. Exit 1.
not_logged_in
No stored session and no HOTCODEPUSH_TOKEN. Interactively, in a terminal without CI, --no-input or --yes, the CLI asks Log in now? first, for a missing session and for one that ended, and raises this only when you decline. Without a terminal, login stops with the approval page and the code for the next login to redeem. binary create under CI without a token stops too.
Log in with hotcodepush login, or set HOTCODEPUSH_TOKEN. A pipeline that never ships its build can set HOTCODEPUSH_OFFLINE=1 instead. Exit 3.
signing_key_unavailable
The app releases only signed bundles, as the public keys in hotcodepush.json say, and neither --private-key-path nor HOTCODEPUSH_SIGNING_KEY gave the private key. A dry run does not raise it.
Pass the private key file signing-key create wrote, or put its content in HOTCODEPUSH_SIGNING_KEY. Sign your bundles has every signing rule. Exit 1.
unexpected
Something the CLI did not foresee threw. It is a bug of the CLI's and the one error it reports, as Telemetry describes.
Run it again with --verbose and, if it happens again, file the detail at the CLI's issues. Exit 1.
unexpected_response
An answer outside the API's shape: a proxy's error page, a body without a code.
Check the API URL in config.json and the connection to it. If it stays, file it at the CLI's issues. Exit 1.
unknown_command
The words after hotcodepush name no command.
Take the closest name the fix line offers, within two edits of what was typed, or list the commands with hotcodepush --help. Exit 1.
unknown_framework
The project has no package.json, or none of @capacitor/core, react-native, expo and cordova is among its dependencies.
Run the command in the app's project, the folder with its package.json. Exit 1.
xcode_project
An Xcode project init cannot edit: project.pbxproj does not parse, or the phase the build step must follow is missing.
Add the build phase to the app target by hand. The fix line names the file and the step. Exit 1.
API errors
An API error passes through as received, its code and message unchanged and fix null. The exit code is 1, or 3 after a 401.
The API reference documents the error shape.
Every code of the catalog has a section below, a short note where no command meets it, and the API's bundle_too_large shares the CLI's bundle_too_large.
account_banned
The account behind the session or the token is suspended, and every command meets it.
An appeal goes to Support.
app_name_taken
An app of that name exists in the organization, names compared case-insensitively among live apps: app create, app update --name, or app transfer into an organization that has one.
Pick another name.
apps_limit_reached
The organization is at its apps limit, as Limits and fair use counts it. app create and app transfer into it refuse.
Delete apps you no longer ship, or ask for a raise.
auth_flow_failed
A browser sign-in through GitHub, Google or an SSO provider failed before it could return to the console. The message is the flow's error name, and no command meets it.
binary_conflict
A store build's identity, platform, version and build, is taken by a binary with another fingerprint or bundle.
binary create --force replaces it for the pre-ship rebuild.
bundle_in_use
bundle delete named a bundle a release was made from, revoked or not, or the embedded bundle of a store build.
Leave it to retention, which removes a bundle no release serves any more.
bundle_not_ready
release create --bundle named a bundle whose upload never completed, or a store build's embedded bundle, which has no manifest to serve.
Upload the build with bundle upload and release that bundle.
channel_name_taken
A channel of that name exists in the app.
channel create --if-not-exists answers the existing channel with exit 0 instead.
channel_protected
The channel is protected and the caller is a Member: a release command on it, channel delete, pause or resume, or an expiry change with channel update. Any other change to it by a Member is forbidden.
Ask an Owner or Admin to run the command, or to lift the flag with channel update --protected false.
channels_per_app_limit_reached
The app is at its channels limit, as Limits and fair use counts it, and channel create refuses.
Delete preview channels that are done with channel delete, or ask for a raise.
client_update_required
The API no longer accepts the CLI's version and names the minimum.
Update the pinned dev dependency.
country_not_allowed
The organization's country allowlist leaves out the country the command runs from, whatever the credential.
An Admin adds your country to the list, or you run the command from one on it.
default_channel
channel delete named the app's default channel, or channel update gave it an expiry.
Make another channel the default in the app's settings in the console, then run the command again.
dns_lookup_failed
sso-provider verify could not ask DNS for the domain's TXT record. A missing or not yet visible record is no error: the domain stays unverified.
Run it again in a few minutes.
files_per_bundle_limit_reached
The build lists more files than the per-bundle limit of Limits and fair use, and the upload is refused.
Take files out of the build, or ask for a raise.
forbidden
Your role is below the command's, you are not a member, or an API token met a command a token cannot use. The message names which. It also answers invitation accept for another address, and member delete or member update aimed at the Owner.
whoami prints your role per organization. Ask an Owner or Admin for the role the command needs, or unset HOTCODEPUSH_TOKEN and run it after login.
hash_mismatch
An uploaded file's bytes do not match the hash in its path. The CLI hashed and compressed the file itself, so the bytes changed on the way.
Run the command again. If it stays, look for a proxy that alters uploads.
idempotency_key_reused
A creating request repeated an idempotency key with another body.
The CLI sends a fresh key per call, so a command run again creates again.
internal
The API failed on its side, and the failure is reported already.
Run the command again. If it stays, check Status and write to Support.
invitation_invalid
invitation accept carried an invitation that is expired, used or withdrawn.
Ask an Owner or Admin for a new one. Members and invitations has the lifetime.
invitations_per_day_limit_reached
The organization sent its day's invitations, the limit of Limits and fair use, withdrawn ones counted. invitation create refuses.
Wait a day. This limit has one value for everyone and is not raised.
ip_not_allowed
The organization's IP allowlist leaves out the address the command runs from, whatever the credential, and a CI runner meets it the same way.
Run it from an allowed address, or ask an Admin to add it.
maintenance
The API is closed for maintenance, which never stops devices from receiving updates.
Wait a few minutes and run the command again, or check Status for the window.
members_limit_reached
The organization is at its members limit, as Limits and fair use counts it, and invitation accept refuses.
Remove members who no longer need access with member delete, or ask for a raise.
not_found
The id the command named is unknown to the API.
channel delete --ignore-not-found succeeds on it.
notification_mandatory
The console refuses to switch off an email marked always on in Notification preferences. No command touches them.
origin_untrusted
A write carried the console's session cookie from an origin the API does not trust. The CLI sends a bearer and never meets it.
password_already_set
A first password was set in the console on an account that has one, and no command does that. Sign-in methods has the change and the reset.
plan_required
The organization's plan does not include the feature: the webhook and audit-log commands, sso-provider set and organization update --spending-cap.
Subscribe to a plan that includes it on the console's billing page or with checkout create. Billing and MAU lists what each plan includes.
rate_limited
The token or session made more requests in a minute than the rate limit allows, and the CLI's own retries ran out. The message names the seconds to wait.
Wait that long, then run the command again.
release_revoked
A revoked release is final: release update, rollout, pause, resume and revoke refuse it, and release rollback never rolls back to one.
release create --bundle releases its bundle again.
releases_per_day_limit_reached
The app made as many releases within 24 hours as Limits and fair use allows. Until the oldest of them ages out of the window, release create and release rollback refuse.
Wait for the oldest release to age out, or ask for a raise.
signature_invalid
The upload's signature does not verify against the signing keys the app holds, as when the key was deleted from the app. The message names the reason.
Compare publicKeys in hotcodepush.json with signing-key list, and sign with a key the app holds or register this one with signing-key add.
signature_required
The app holds a signing key and the bundle arrived unsigned: hotcodepush.json lists no public key.
Add the keys signing-key list --json prints to publicKeys, as Sign your bundles describes.
sole_owner
You are the Owner, and member delete named you. Deleting the account meets it too while you own an organization with other members.
Transfer the ownership with member update --role owner, or delete the organization with organization delete.
sso_required
A member behind a verified SSO domain signed in with a password, GitHub or Google, or set a password, in the console. No command does either.
storage_limit_reached
The organization is at its storage limit under fair use: an upload refuses, and so does app transfer into such an organization.
Delete bundles no release was made from with bundle delete, or ask for a raise.
tokens_limit_reached
The account holds as many API tokens as it may. Tokens are created in the console alone, so no command meets it.
two_factor_required
The organization requires two-factor authentication and the account has none. Every command inside the organization refuses, with an API token too.
Enable it under Two-factor authentication on the account page.
unauthenticated
The API refused the bearer: HOTCODEPUSH_TOKEN is wrong or revoked, a stored session was revoked, or a stored session ended and the run was not interactive. Interactively a session that ended is caught before the command runs and asks to log in, as login says.
Log in again, or set a fresh HOTCODEPUSH_TOKEN. Exit 3.
upload_incomplete
The API names the files it still lacks.
binary create uploads them and creates the binary again on its own.
validation
The API refused a value the CLI's own checks let through, such as a rollback in a channel with no earlier release. The message names the field and why.
Change the value the message names.
webhook_name_taken
A webhook of that name exists in the organization, names compared case-insensitively: webhook create or webhook update --name.
Pick another name.
Last updated on
Exit codes
The five exit codes of the hotcodepush CLI, from 0 for success to 4 for a confirmation that needs --yes, and how a script reads them.
Telemetry
Field by field, the usage event and the error report the hotcodepush CLI sends, where each one goes, the first-run notice and the two variables that turn both off.