Skip to article
Browse documentation +
ACCOUNT / ELPIS

Accounts & access

Sign-up, email verification, sessions, two-factor with recovery codes, and wallet sign-in.

Ways in

MethodDetails
Email + passwordRequires email verification before the account is usable.
Wallet sign-inProve control of an address by signing a fixed statement — no gas, no funds moved.
Two-factorTOTP (any authenticator app) on top of either method.

Sessions

  • Sessions are signed cookies (HMAC-SHA256) over a server secret, verified in constant time.
  • The secret must be at least 32 characters. If it is missing or too short, Elpis fails closed rather than issuing a weak session.
  • A separate TOTP_SECRET encrypts 2FA secrets at rest, so rotating the session secret does not lock anyone out of two-factor.

Two-factor and recovery codes

Enrolment shows a QR code, confirms one code, then displays recovery codes once — they are not retrievable again, because they are not stored in a recoverable form.

Store the recovery codes when they are shown. If you lose the authenticator and the codes, you can still reset the password by email — see below. A wallet-only account with no other credential is the one case that remains manual, by design.

Password reset

POST /api/auth/password/request mails a single-use link that expires in an hour; POST /api/auth/password/reset sets the new password and revokes every session. A reset is usually a response to a suspected compromise, so leaving other devices signed in would defeat the point.

The request answers identically whether or not the address has an account, so it is not an account-enumeration oracle. A wallet-only account has no password to reset.

Throttling

Sign-in and 2FA verification are rate-limited per identity and per source. An unknown email takes a comparable path to a known one, so the response does not disclose which accounts exist.

What a wallet signature proves

It proves control of an address. It does not prove the person at the keyboard — so a wallet account is treated as one credential, and two-factor is available on top of it exactly as it is for a password account.

API keys

  • Scopes: read, propose, approve. A key holds only what it needs.
  • Secrets are shown once at creation and stored hashed.
  • Keys can be revoked without affecting other keys on the account.
  • Agent keys should never carry approve — that is the line between a suggestion and an authorisation.