Skip to content
AtlasDocs
Sign inGet started
Updated Aug 04, 2026

Exit Codes

The numeric status codes returned by every SDK call. Stable and add-only - bindings pin against this contract.

Contract

Status codes are a stable numeric contract - do not renumber. Add-only. Every call site in the SDK returns one of these.

Each binding converts the C ABI integer to its own idiom:

  • C++ - most calls return bool;Atlas::Account::Login returns LoginResult with a Status enum.
  • JS / Python - license and account methods return bool; Account.Login returns a result object with .status as one of seven string values (the same shape as the C++ enum).

Code table

StatusC++JSPythonMeaningWhat to do
ATLAS_OK000Call succeeded. The session is live (for auth calls); for non-auth calls, the operation completed.Continue normal flow.
ATLAS_ERR_NOT_STARTED111The SDK isn't initialised. A Login or Network call was made before Startup(), or after Logout().Call Startup() first.
ATLAS_ERR_NO_API_KEY222API key wasn't set before Startup(). The C binding's Atlas_SetApiKey must run first; the JS / Python bindings set it from the module export.Set API_KEY before Startup().
ATLAS_ERR_LOGIN_FAILED333Server rejected the credentials. The JS / Python Account.Login routes on GetErrorMessage() text to discriminate WrongCredentials / Banned / AccountPaused.Call GetErrorMessage() for the human-readable reason.
ATLAS_ERR_NOT_AUTHED444A session-required call (Network, SubmitLog, ChangePassword, …) was made without an active session.Sign in first.
ATLAS_ERR_BAD_ARG555An argument failed validation - e.g. Atlas_SetAppHash with uppercase, empty, or wrong-length input. Atlas_SetAppHashPath on an empty path or one over 32767 chars.Fix the argument and retry.
ATLAS_ERR_BUFFER_TOO_SMALL666The size-query pattern was mis-used: out_size < the bytes the getter wants to write. All string getters follow: pass NULL, 0 first to learn the size, then allocate and re-call.Re-call with the size returned by the first call.
ATLAS_ERR_SERVER777Network / server failure that isn't a credential rejection. DNS, TCP, transport, or 5xx.Back off and retry. Account.Login maps this to Status.ServerUnreachable.
ATLAS_ERR_INTERNAL888Unexpected client-side failure. Usually an integrity-check fail with no MessageBox (quiet mode).Check GetErrorMessage() and the server-side event under Dashboard → Logs.
ATLAS_ERR_NEEDS_VERIFY101010Account-mode only. The server emailed an 8-digit code; the SDK is holding the challenge. Call Atlas_SubmitVerify(code) with the code to finish sign-in.Surface the masked email / IP / country to the user; call SubmitVerification.

How bindings hide these

Most bindings don't expose the raw numeric codes. They translate:

  • C++: license & network methods collapse everything to bool. The full numeric shape lives in the SDK's C ABI for non-C++ hosts.
  • JS: same collapse to boolean (truthy = OK). Account.Login returns a result object with .status as a string of the seven Status values.
  • Python: same as JS - True/False for everything except Account.Login, which returns a LoginResult with .status as a string.