HeyPuter/puter · error · HttpError
account_is_not_verified
account_is_not_verified
Error message
Account email is not verified
What it means
Raised by `assertVerifiedEmail(strictFlag, user)`: the route passed `strictFlag=true` (it requires a verified email) and the user's `email_confirmed` is falsy. This is a per-route strict gate, distinct from the account-level `requires_email_confirmation` flag in `assertVerifiedAccount`. The status code is configurable (default 403).
Source
Thrown at src/backend/core/http/verifiedEmail.ts:37
import { HttpError } from './HttpError.js';
type EmailVerifiedUser =
| {
email_confirmed?: unknown;
}
| null
| undefined;
export const assertVerifiedEmail = (
strictFlag: boolean,
user: EmailVerifiedUser,
statusCode = 403,
): void => {
if (!strictFlag) return;
if (user?.email_confirmed) return;
throw new HttpError(statusCode, 'Account email is not verified', {
legacyCode: 'account_is_not_verified',
});
};
View on GitHub (pinned to 908ec23eda)
Solutions
- Confirm the account's email address.
- Resend the confirmation email if needed.
- If the route does not truly require it, pass `strictFlag=false` (or the status code / gate) when calling assertVerifiedEmail.
Example fix
// before assertVerifiedEmail(true, user); // after (route that does not require it) assertVerifiedEmail(false, user);
Defensive patterns
Strategy: validation
Validate before calling
// Gate strict routes client-side when you know the user's email state:
if (strict && !(user && user.email_confirmed)) { promptEmailConfirmation(); return; } Type guard
const hasVerifiedEmail = (u) => !!(u && u.email_confirmed);
Try / catch
try { await call(); }
catch (e) {
if (e.code === 'account_is_not_verified') { resendConfirmation(); return; }
throw e;
} Prevention
- Confirm email before reaching strict-verification routes.
- Resend the confirmation link if it may have expired.
- Only opt a route into strict email verification when genuinely required.
When it happens
Trigger: A handler explicitly calls `assertVerifiedEmail(true, user)` (or a route opts into strict email verification) while the caller's email is unconfirmed.
Common situations: A feature route tightened to require verified email; a user who registered but never confirmed; `email_confirmed` reset after an email change.
Related errors
- email_confirmation_required
- phone_verification_required
- card_verification_required
- app_or_api_token_required
AI-assisted analysis of HeyPuter/puter@908ec23eda (2026-08-12).
Data as JSON: /api/errors/cb7171f60664d20f.
Report an issue: GitHub.