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::LoginreturnsLoginResultwith aStatusenum. - JS / Python - license and account methods return
bool;Account.Loginreturns a result object with.statusas one of seven string values (the same shape as the C++ enum).
Code table
| Status | C++ | JS | Python | Meaning | What to do |
|---|---|---|---|---|---|
| ATLAS_OK | 0 | 0 | 0 | Call succeeded. The session is live (for auth calls); for non-auth calls, the operation completed. | Continue normal flow. |
| ATLAS_ERR_NOT_STARTED | 1 | 1 | 1 | The SDK isn't initialised. A Login or Network call was made before Startup(), or after Logout(). | Call Startup() first. |
| ATLAS_ERR_NO_API_KEY | 2 | 2 | 2 | API 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_FAILED | 3 | 3 | 3 | Server 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_AUTHED | 4 | 4 | 4 | A session-required call (Network, SubmitLog, ChangePassword, …) was made without an active session. | Sign in first. |
| ATLAS_ERR_BAD_ARG | 5 | 5 | 5 | An 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_SMALL | 6 | 6 | 6 | The 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_SERVER | 7 | 7 | 7 | Network / 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_INTERNAL | 8 | 8 | 8 | Unexpected 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_VERIFY | 10 | 10 | 10 | Account-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.Loginreturns a result object with.statusas a string of the sevenStatusvalues. - Python: same as JS -
True/Falsefor everything exceptAccount.Login, which returns aLoginResultwith.statusas a string.
Was this page useful?