Skip to content
Windows only · Invite only. To get the SDK, DM @snailyt on Telegram.

Errors and messages

Every call returns or passes an eonauth::Result:

struct Result {
Status status; // see below
std::string message; // safe to show users
long long retryAfterSeconds; // set with Status::RateLimited
std::map<std::string, std::string> details; // e.g. "download_url" with UpdateRequired
bool ok() const;
explicit operator bool() const; // true when status == Status::Ok
};

eonauth::ToString(status) gives the code as text, such as "LICENSE_EXPIRED".

if (!r) ShowStatus(eonauth::UserMessage(r), eonauth::UserHint(r));
  • UserMessage(r) is the line to put on screen. For decisions the server made, it keeps the server’s wording, which the app owner can change under App settings → Client messages. Network, TLS and protocol failures become plain language instead of TLS_PIN_MISMATCH.
  • UserHint(r) is the next step, or empty: the download link for UpdateRequired, Turn on Set time automatically for a wrong clock, how long to wait after RateLimited.
if (eonauth::IsTransient(r.status)) {
// NetworkError, RateLimited, ServerError: says nothing about the user. Try again later.
} else if (eonauth::IsAccessDenied(r.status)) {
// The server refused the user or session. Lock the app.
}

IsAccessDenied is true for UserBanned, UserPaused, Blacklisted, FreeModeDisabled, UpdateRequired, LicenseInvalid, LicenseBanned, LicenseExpired, HwidMismatch, SessionInvalid, SessionExpired and AppDisabled.

Status Meaning
Ok Success
NotInitialized Init hasn’t succeeded
NotLoggedIn The call needs a signed-in session
NetworkError DNS, connect or timeout, or server errors after retries. For register, key login and redeem it may mean “might have gone through”
TlsPinMismatch The certificate chain didn’t match a pinned key: possibly intercepted
ClockSkew The PC’s clock is too far off and couldn’t be corrected
ProtocolError The server refused the envelope, or a response failed its signature or decryption. Also what a retired key set gets
RateLimited Too many requests; see retryAfterSeconds
ServerError The server failed
Status Meaning
InvalidRequest Bad input (the SDK checks most of it before sending)
InvalidCredentials Wrong username or password
UsernameTaken Another account in the app has that name
UsernameRequired First sign-in with this key: ask for a username and call again
UsernameTooShort Shorter than the app’s minimum
PasswordLeaked The password is in a public breach, and the app blocks those
UserBanned The account is banned
UserPaused The seller paused the subscription
Blacklisted This PC or IP address is blacklisted
FreeModeDisabled LoginFree, but the app doesn’t offer free access
AccountRequired A free mode session tried an account feature
UpdateRequired The app version is below the minimum; see details["download_url"]
LicenseInvalid No such key
LicenseInUse The key belongs to another account
LicenseBanned The key was revoked
LicenseExpired The key’s or account’s time ran out
LicenseTypeNotAllowed For example a one-time key used to create an account or redeemed into one
HwidMismatch The account is locked to another PC
SessionInvalid The session is unknown or was ended
SessionExpired The session timed out
VariableNotFound Unknown variable ID, or locked to tiers the user doesn’t have
FileNotFound Unknown file ID, or locked to tiers the user doesn’t have
QuotaExceeded For example too many per-user variables
AppDisabled The app is disabled or its account is suspended
TurnstileFailed The app requires Turnstile and the token was missing or wrong

The server-side codes are also listed, with HTTP statuses, in Error codes.