Back to home

Documentation

Everything you need to know about NOVA Mail — encrypted, private, and ad-free, with no AI on your mailbox by default.

API Reference

Every endpoint below is implemented by NOVA's Pages Functions and reachable at https://nova-email.com. Authenticated mailbox routes take Authorization: Bearer <token>.

Authentication

Base https://nova-email.com/api/auth
MethodRouteDescription
POST/registerCreate an account: email, password, captcha_token, account_type (standard/kid), parent_email for kid accounts.
POST/loginPassword login: email, password, captcha_token. Returns token + user_id + email, or { mfa_required } / { otp_required } when a second factor is on.
POST/otp-verifyVerify an email one-time code: otp_id + code, or { action: "resend", delivery_email } to send a new code.
POST/send-codeSend the registration verification code to a personal email.
POST/mfa/verifyVerify a TOTP code: mfa_session_id + code.
POST/passkey/optionsGet WebAuthn assertion options for an email before passkey sign-in.
POST/passkey/verifySubmit a completed WebAuthn assertion and finish the login.
POST/logoutRevoke the current session token.
GET/checkValidate the session token in the Authorization header.

Mailbox

Base https://nova-email.com/api/mailbox — requires Authorization: Bearer <token>. Message flags: 1 = read, 2 = starred.
MethodRouteDescription
GET/messagesList messages. Query: folder (inbox|sent|drafts|archive|trash|spam|starred|…), folder_id (custom folder), q (search). Returns { messages, next_cursor }.
GET/messages/:idOne message with parsed recipients_to / recipients_cc arrays and attachment metadata.
POST/messagesSend an email: from_field, to, cc, bcc, subject, body (+ optional attachment).
POST/messages/:id/readMark a message as read (flag 1).
POST/messages/:id/unreadMark a message as unread (clear flag 1).
POST/messages/:id/starToggle the starred flag (bit 2).
POST/messages/:id/pinToggle the pinned flag (bit 8).
POST/messages/:id/snoozeSnooze a message until a timestamp.
POST/messages/:id/unsnoozeRemove a snooze.
POST/messages/:id/moveMove a message to a folder: { target_folder_id }.
POST/messages/:id/spamReport a message as spam and move it to the spam folder.
POST/messages/:id/not-spamMark a message as not spam and restore it to the inbox.
POST/messages/:id/block-senderBlock the sender and discard their future messages.
DELETE/messages/:idDelete (trash) a message.
GET/messages/:id/attachments/:nameDownload an attachment.
POST/send/undoUndo a send within the recall window.
POST/draftsSave a draft: subject, body, is_html. Creates a new draft.
GET/foldersList folders with id, name, type, unread_count.
POST/foldersCreate a custom folder: { name }.
PUT/folders/:idRename a custom folder.
DELETE/folders/:idDelete a custom folder.
GET/labelsList labels.
POST/labelsCreate a label: { name }.
PUT/labels/:idRename a label.
DELETE/labels/:idDelete a label.
GET/messages/:id/labelsLabels applied to a message.
POST/messages/:id/labelsApply labels: { label_ids }.
DELETE/messages/:id/labels/:labelIdRemove a label from a message.
GET/contactsList contacts (search: q).
POST/contactsCreate a contact: { email, name }.
PUT/contacts/:idUpdate a contact.
DELETE/contacts/:idDelete a contact.
GET/settingsGet account settings.
PUT/settingsUpdate account settings.
GET/aliasesList email aliases.
POST/aliasesCreate an alias.
POST/aliases/:id/toggleEnable or disable an alias.
DELETE/aliases/:idDelete an alias.
GET/filtersList mail filters.
POST/filtersCreate a filter.
PUT/filters/:idUpdate a filter.
DELETE/filters/:idDelete a filter.
GET/vacationGet auto-reply settings.
PUT/vacationSet auto-reply settings.
GET/forwardingGet forwarding settings.
PUT/forwardingUpdate forwarding settings.
GET/domainsList verified custom domains.
POST/domainsAdd a custom domain.
POST/domains/verifyVerify a custom domain by DNS record.
DELETE/domains/:nameRemove a custom domain.
GET/external-accountsList connected IMAP accounts.
POST/external-accountsConnect an IMAP account.
DELETE/external-accounts/:idDisconnect an IMAP account.
POST/sync-accountTrigger an IMAP resync.
GET/sessionsList active sessions.
POST/sessions/revoke-allRevoke all sessions.
DELETE/sessions/:idRevoke one session.
GET/two-factorCheck whether TOTP is enabled.
POST/two-factor/setupStart TOTP setup: returns an otpauth URI.
POST/two-factor/enableConfirm and enable TOTP with a code.
POST/two-factor/disableDisable TOTP.
POST/two-factor/recovery-codesGenerate recovery codes.
GET/passkeysList passkeys on the account.
POST/passkeys/register-optionsGet WebAuthn creation options.
POST/passkeys/registerRegister a passkey.
DELETE/passkeys/:idRemove a passkey.
GET/security/blocklistList blocked senders.
GET/security/allowlistList allowed senders.
POST/security/listsBlock or allow a sender: { email, list }.
DELETE/security/listsRemove a sender from a list.
GET/parental-controlsGet kid-account supervision settings.
PUT/parental-controlsUpdate supervision settings.
GET/subscriptionsList mailing-list subscriptions.
POST/subscriptionsAdd a subscription monitor.
PUT/subscriptions/:idUpdate a subscription.
DELETE/subscriptions/:idRemove a subscription.
POST/subscriptions/:id/unsubscribeTrigger an unsubscribe request.
GET/keysGet the identity key bundle.
POST/keysProvision encryption keys.
GET/exportExport your mailbox data.
GET/audit-logRead account audit events.
GET/userAccount profile: email, display_name, plan.
POST/password-changeChange the account password.
GET/versionAPI version string.

Additional endpoints

Standalone routes on the same API surface.
MethodRouteDescription
POST/api/account/deleteRequest account deletion (sends a confirmation).
POST/api/disposable/createInstant one-click disposable email address.
POST/api/disposable/deleteDelete a disposable address.
POST/api/reportReport an abusive message.
POST/api/feedbackSubmit product feedback.
GET/api/cli/versionLatest CLI version for upgrades.
GET/statusService status / health probe.
GET/api/aiAI assistant status (opt-in).
POST/api/ai/enableEnable the AI assistant.
POST/api/ai/sendHave the assistant send a drafted reply.
GET/api/ai/mailboxList AI-assistant message snapshots.
POST/api/inbound/*Inbound webhook receiver (Postmark + custom SMTP deliveries).

Error Reference

ERR_AUTH_001

Invalid email or password

Double-check your credentials. Passwords are case-sensitive and hashed with Argon2id.

ERR_AUTH_002

Session expired

Sign out and sign back in. Sessions last 24 hours.

ERR_AUTH_003

Invalid verification code

Enter the 6-digit code sent to your email. Codes expire after 10 minutes.

ERR_AUTH_004

Email verification required

Verification is mandatory. Complete email verification during registration.

ERR_REG_001

Email already taken

Choose a different email address. Check availability on the registration page.

ERR_REG_002

Maximum 5 accounts per email

Each verified email can register up to 5 NOVA accounts.

ERR_REG_003

Parent account not found

The parent must create their NOVA account before the kid account.

ERR_REG_004

Must agree to Terms of Service

Check the agreement box on the registration or disposable creation page.

ERR_SEND_001

Failed to send to recipient

The recipient's mail server rejected the message. Check the address and try again.

ERR_SEND_002

Sender unauthenticated

SPF/DKIM records need to be configured for nova-email.com.

ERR_SEND_003

Recipient not found

The recipient address does not exist on NOVA. Check for typos.

ERR_SYNC_001

IMAP connection failed

Check your IMAP server address and port. Ensure app passwords are used.

ERR_SYNC_002

Invalid IMAP credentials

Use an app-specific password, not your regular email password.