Documentation

Everything you need to master AXO Email.

Start with Getting started, skim the feature guides, or jump straight to keyboard shortcuts. Use ⌘K to search these docs.

Try "keyboard shortcuts", "migration", "filter rules", "shared inboxes".

Overview

AXO Email is business email on your own domain, plus a built-in calendar, file hub, contacts, and admin console. This guide walks through everything the product does — pick what you need, or read it top-to-bottom once and you'll never open it again.

Five-minute tour. On your first sign-in, a built-in tour spotlights the Compose button, sidebar, search, Contacts, and avatar menu. Skip it or take it — you can relaunch it anytime by running __axoStartTour() in the browser console.

Create an account

Visit signup and complete the five-step wizard:

  1. Account — your name, the email you use today (where account info goes), a password (10+ characters), and the domain you want to use for business email.
  2. Plan — Starter, Business, or Enterprise, billed monthly or yearly. You can change this later.
  3. Setup path — DIY (free) or Concierge ($49 one-time, we handle the DNS work).
  4. Payment — your card is required and billed today for your subscription. The $49 concierge fee, if you opt in, is billed separately on the same day.
  5. Done — we show DNS records if you picked DIY, or a timeline if you picked Concierge.

Connect your domain

Email needs four DNS records on your domain for us to send, receive, and pass modern deliverability checks:

  • MX × 2mx1.axoemail.com (priority 10) and mx2.axoemail.com (priority 20). These route incoming mail to us.
  • SPF (TXT)v=spf1 include:_spf.axoemail.com ~all. Authorizes us to send on your behalf.
  • DKIM (TXT) — we generate a per-customer public key and show you the record. Signs outgoing mail cryptographically.
  • DMARC (TXT)v=DMARC1; p=quarantine; rua=mailto:[email protected]. Tells receivers what to do with unauthenticated mail claiming to be from your domain.

Our setup guide has copy-to-clipboard buttons for each value, plus registrar-specific instructions (GoDaddy, Namecheap, Cloudflare, Route 53, more).

Propagation time. DNS changes usually propagate within 15 minutes but can take up to 48 hours depending on your registrar's TTL. You'll see a live "Verified" chip in Admin → Domains once each record is detected.

First sign-in

Head to signin, enter your credentials, and you'll land in Inbox. The URL bar shows #inbox; you can change folders just by typing a new hash (#sent, #drafts, #label/work) — refreshes keep state.

Verify your email

The first time you send, we ask you to verify the admin email you entered. You'll get a 6-digit code by SMS — paste it into verify-email. The code auto-submits once you've typed all six digits. If it's lost, "Resend" has a 60-second cooldown.

Inbox basics

The webmail app has three panes:

  • Sidebar — folders (Inbox, Starred, Snoozed, Sent, Drafts, Archive, Spam, Trash), your custom labels, storage meter, and links to Contacts / Admin / Settings.
  • Message list — one row per message with sender, timestamp, subject, preview snippet, star, attachment icon, and label chips.
  • Reading pane — the selected message with full actions (star, archive, snooze, delete, more) and reply/reply-all/forward row at the bottom.

Click a sender's name to open a quick card with contact details and recent messages; click a label chip in the list head to jump to that label.

Compose, reply, forward

Click New (or press c) to open the compose panel. It slides in from the bottom-right.

  • To / Cc / Bcc — click "Cc · Bcc" to expand. Autocomplete from your Contacts pulls in as you type.
  • Subject & body — body is a rich-text editor with Bold (⌘B), Italic (⌘I), Underline (⌘U), bullet/numbered lists, and inline links.
  • From address — bottom-right picker lets you choose which of your aliases to send from.
  • Pop out — the arrow icon in the compose header expands to full screen.

Replying preserves the quoted thread. Reply-all pre-fills Cc with everyone from the original. Forward pre-fills the subject with "Fwd:" and leaves To empty.

Attachments

Three ways to attach:

  • Click the paperclip in the compose toolbar.
  • Drag and drop files onto the compose body.
  • Use the image icon to insert an inline image.

Each attachment appears as a chip below the editor with filename, size, and a remove button. Icons are color-coded by type (PDF red, image purple, doc blue, sheet green, archive gray).

Drafts & autosave

We save your draft 1.2 seconds after you stop typing. The compose header shows "Saving…" then "Draft saved". Close the panel and the draft lives in Drafts — click it there to continue editing (same draft ID updates, no duplicates).

The trash icon in compose discards the draft (confirmation prompt if there's any content).

Send, undo, schedule

Click Send (or press ⌘⏎) and a toast appears with a 5-second Undo button. Click it to reopen the composer with the exact content restored — no message is actually sent until the 5 seconds expire.

For scheduled send, click the caret next to Send:

  • Tomorrow morning · Tomorrow afternoon · Monday morning (dates computed live)
  • Or pick a custom date & time

Archive, snooze, spam, trash

All actions are available in the reading pane header, via keyboard shortcuts, or via bulk selection. Here's what each does:

  • Archive (e) — moves out of inbox, stays searchable forever.
  • Snooze (z) — pops a popover with presets (Later today, Tomorrow morning, This weekend, Next week) or a custom datetime. The message moves to Snoozed with a wake time; view it any time, or let it return to Inbox at wake time.
  • Delete (#) — moves to Trash, auto-purged after 30 days.
  • Report spam — from the ⋮ more menu. Moves to Spam and helps train our filters.

When viewing a message in Trash, Spam, or Archive, a Restore to Inbox button replaces Archive in the header. For messages already in Trash, Delete becomes Delete permanently.

Multi-select & bulk actions

Each row in the list has a checkbox. Selecting one or more reveals the Bulk actions bar above the list with: Archive, Delete, Spam, Mark unread/read, Star, Apply label, Clear selection. The select-all checkbox in the list head toggles all visible items.

Folders & labels

Built-in folders are fixed: Inbox, Starred, Snoozed, Sent, Drafts, Archive, Spam, Trash. Labels you create yourself (via the next to LABELS in the sidebar) are like Gmail labels — a message can have multiple, they don't move the message out of its folder.

Drag a message onto a folder or label in the sidebar to apply it. If you've selected multiple, all move.

Filters & rules

Filters are rules that run on incoming mail automatically. Create them in Settings → Filters. Each filter has:

  • Conditions — one or more rows like "subject contains 'invoice'". You choose "match all" (AND) or "match any" (OR) across conditions.
  • Actions — any combination of: apply label, move to folder, mark as read, skip inbox, star, forward to, delete.
  • Apply to existing messages — optional; runs the rule once against your current mail.

Conversation threading

When enabled (Settings → Account → Interface), messages with the same normalized subject group into a thread. Each thread row shows a small chip with the message count. Disable threading if you prefer flat lists.

Smart banners

The reading pane surfaces helpful actions at the top of certain messages:

  • Unsubscribe banner (amber) — appears on messages from likely mailing lists. One-click Unsubscribe + Block sender.
  • Event detection banner (blue) — appears when we detect a date/time and a meeting keyword. "Add to calendar" opens the event modal pre-filled.
  • Shared-inbox banner (purple) — appears when the message was sent to a shared address. Shows assignment picker, status pills, and internal notes.

Search basics

The search field is always accessible: press / to focus it. Typing anything searches across From, To, Subject, preview, and message body. Empty the field to restore the full folder view.

Search operators

Prefix a keyword with a colon to narrow results:

OperatorExampleWhat it does
from:from:adaSender name, email, or domain contains the value
to:to:[email protected]Recipient matches
subject:subject:"Q2 proposal"Subject contains exact phrase (use quotes for spaces)
label:label:receiptsMessage has the label
has:has:attachmentMessage has attachments
is:is:starred · is:unreadState flags
folder:folder:sentScope to a specific folder
before:before:2026-04-01Date cutoff (ISO date)
after:after:2026-01-01Date start
not:not:newsletterExclude messages containing the term

Combine freely: from:ada has:attachment after:2026-04-01.

Visual filter builder

Not a fan of typing operators? Click the funnel icon inside the search bar to open the Filter builder:

  • Text fields: From, To, Subject, Has the words, Doesn't have
  • Date range: After / Before
  • Selects: In folder, Label
  • Checkboxes: Has attachment, Starred, Unread

Click Apply filters and we build the operator query for you. Active filters show as dismissible chips above the message list — click × on any chip to remove just that filter.

Saved searches

The bookmark icon opens your saved searches. To save a query:

  • Build it in the filter panel, then click Save search and name it.
  • Or, with a query active in the search bar, click Save in the chip row.

Saved searches persist in your browser. Hover any saved row to rename or delete it.

Calendar — views & navigation

Open Calendar from the sidebar or the #calendar hash. Four views (Month, Week, Day, Agenda) via the toggle in the header. Use the prev/next arrows or the Today button to navigate.

Create & edit events

Click any empty calendar cell to start a new event pre-dated to that day. Click an existing event to edit. The event modal covers:

  • Title, start & end, all-day toggle
  • Location (Zoom link, room name, address)
  • Attendees (comma-separated; they'll get invites)
  • Notes, color (6 options), reminder (at time, 5 / 15 / 30 min, 1 hr, 1 day)

Event detection from email

When a message contains a meeting keyword and a date/time, the reading pane shows an "Add to calendar" banner. Clicking it opens the event modal with the subject as the title, the message snippet as notes, and the sender as an attendee. Adjust and save.

Files — browse & search

The Files hub (sidebar or #files) aggregates every attachment across every message you've sent or received, plus anything you've uploaded directly.

  • Type filters with live counts: All, Images, PDFs, Documents, Spreadsheets, Other.
  • Search matches file name, sender name, and sender email.
  • Grid vs list toggle — grid shows a thumbnail preview by type; list shows name, shared-by, size, date in columns.

Upload & share

The Upload button opens a file picker (multi-select supported). Uploads appear at the top of the list immediately. Click any file to open the preview modal with:

  • Download — original file.
  • Share link — copies a public link to clipboard.
  • Open original message — jumps back to the email the attachment came from (hidden for direct uploads).

Manage contacts

Contacts is a two-pane view: searchable list on the left, detail on the right. The button opens the contact modal (first, last, email, company, phone, notes). The detail pane shows their recent messages in your inbox — click one to jump back to mail.

Compose autocomplete

Typing a name or email in To / Cc / Bcc pulls matching contacts from your address book. Tab or click a suggestion to insert it. Autocomplete prefers contacts you email most often.

Shared inboxes

A shared inbox is an alias (like support@ or hello@) routed to multiple teammates. Admins create and configure them in Admin → Shared inboxes.

Assignment & status

Open a message in a shared inbox and you'll see a purple banner at the top:

  • Assignment picker — assign the conversation to one teammate so you don't double-reply.
  • Status pills — Open, Waiting, Closed. Color-coded; only one active at a time.

Internal notes

Below the status row, add internal notes visible only to teammates. Use @name to mention someone — they'll get notified. Notes stay with the thread forever and never go to the sender.

Create templates

Settings → Templates lets you create reusable drafts with a name, shortcut, subject, and body. We ship four defaults: /intro, /followup, /thanks, /welcome.

Variables

Four variables get substituted when the template is inserted:

  • {name} — recipient's name (derived from email local-part, title-cased)
  • {first_name} — just the first segment
  • {my_name} — your display name
  • {date} — today's date

Shortcut expansion

Two ways to use a template:

  • Click the templates icon in compose — searchable popover.
  • Type the shortcut in the compose body followed by a space (e.g. /intro ) and we replace it with the template content.

Account & appearance

Settings → Account covers:

  • Profile — display name, profile photo, primary email (read-only; contact support to change).
  • Regional — timezone, language, date format.
  • Appearance — theme (Dark, Light, Match system), conversation view, dense layout, preview snippets.

Preferences persist in your browser via localStorage; log in from a new device and the interface reverts to defaults until you set them there too.

Security & 2FA

Settings → Security:

  • Password — change requires your current password. We show the last-changed date.
  • Authenticator 2FA — toggling on opens a modal with a QR code and a 6-digit verify field. Use 1Password, Authy, Google Authenticator, or any TOTP app.
  • SMS backup — optional second factor for when you lose your authenticator.
  • Recovery codes — 10 codes, each valid once. Download them as .txt or copy all. Regenerate anytime (invalidates the previous batch).
  • Active sessions — list of signed-in devices with revoke per row and a "Sign out of all other sessions" button.
  • Delete account — permanent. Type delete my account to confirm. Separate from subscription cancellation.

Forwarding

Auto-forward incoming mail to another address:

  • Enable the top toggle and enter a verified destination.
  • Choose Everything or Only messages that match a filter.
  • Decide what happens to the original: keep in inbox, mark as read, archive, or delete.

Signature

Plain signature with a basic formatting toolbar. Toggle "Insert before quoted text on replies" if you prefer your signature to appear above the thread rather than below it.

Vacation responder

Auto-reply when you're away. Set a date range, subject, body, and who receives it (everyone, only your contacts, or only people outside your company). The responder disables itself on the end date.

Aliases

Extra addresses that deliver to this mailbox. Add billing@, hello@, invoices@ — one mailbox, many identities. Each alias can be shared with teammates (becomes a shared inbox) or set as the default sending address.

Safe & blocked senders

Two chip lists plus three phishing-protection toggles:

  • Safe senders — always bypass spam. Add entries like [email protected] or @acme.co (whole domain).
  • Blocked senders — straight to Spam. Same format.
  • Warn on unknown senders — banner on first message from a new address.
  • Scan links at click-time — we check URLs against threat feeds when you click.
  • Block external images by default — kills tracking pixels.

Three behavior toggles:

  • Sign every outgoing message (recommended).
  • Encrypt when the recipient has a public key we know about.
  • Require encryption for replies to already-encrypted threads.

Import public keys for contacts in the "Known public keys" section.

Billing

Three summary cards: Current plan, Next invoice, Payment method. Each has a primary action:

  • Change plan — opens the plan picker with monthly/yearly toggle. Changes are prorated on your next invoice.
  • View invoices — list of past invoices with PDF download.
  • Update card — card form. Card processing is handled by Stripe; no card data ever lands in AXO's systems.

The Danger zone below has "Cancel subscription". We recommend cancellation over deletion — cancellation keeps your data recoverable for 30 days.

Admin — overview

Admin console (sidebar or #admin) is available to users with the Owner or Admin role. Seven tabs.

Overview shows four stat cards (mailboxes, storage, messages, avg response) and an onboarding checklist (domain verified, billing set, invite team, start migration).

Users & mailboxes

Table of users with role, status, storage, last-active. Invite mailbox adds a new seat; we email the invitee to set up their password. Per-user actions: change role, suspend, reset password, view activity, remove.

Shared inboxes

Create and manage shared aliases. Each row shows the address, assigned teammates, open-message count, and avg response time. Click Manage to configure who can see/respond.

Domains

Every domain you've connected, each with a DNS-health panel (MX, SPF, DKIM, DMARC) color-coded green/amber/red. Re-check DNS on demand. Add domain kicks off a verification flow.

Compliance & retention

Retention policy runs auto-deletion across all mailboxes in the org:

  • Enable toggle + duration (default 365 days; caps by plan — Starter 1 year, Business 7 years, Enterprise unlimited).
  • "Preserve sent mail separately" exempts sent.
  • "Block external forwarding" prevents users from auto-forwarding to non-company domains.

Audit log

Admin actions are recorded — sign-ins, role changes, mailbox creation, password changes, integration tokens, DNS changes. Visible from Admin → Audit Log. Each entry shows who did what, when, and from which IP.

API & webhooks

AXO Email exposes a REST API for programmatic management of customers, domains, mailboxes, aliases, subscriptions, migrations, and webhooks. Plus an HMAC-signed webhook system that pushes lifecycle events to URLs you control — useful for building admin panels, billing reconciliation, customer-facing dashboards, or any app that needs to react to email outcomes without polling.

Base URL: https://app.axoemail.com/api/v1/company. Auth: bearer token in the Authorization header. Tokens are created from Admin → Settings → API Tokens — displayed once at creation, save immediately. Default rate limit: 60 requests/minute per token.

Available resources

  • CustomersGET / POST / PUT / DELETE /customers. CRUD for the people whose mail you host.
  • DomainsGET / POST /domains, POST /domains/{id}/verify-dns, POST /domains/{id}/generate-dkim. DNS verification and DKIM key generation.
  • MailboxesGET / POST / PUT / DELETE /mailboxes, POST /mailboxes/{id}/change-password, POST /mailboxes/{id}/import (IMAP migration from any provider).
  • AliasesGET / POST / PUT / DELETE /aliases.
  • SubscriptionsGET / POST / PUT /subscriptions, POST /subscriptions/{id}/cancel, POST /subscriptions/{id}/reactivate.
  • Packages (read-only) — GET /packages.
  • UsageGET /usage, GET /usage/domain/{id}.
  • WebhooksGET / POST / PUT / DELETE /webhooks, POST /webhooks/{id}/rotate-secret.

Webhook events

Subscribe to one or more event types when creating a webhook. AXO Email currently fires 17 distinct events:

EventFires when
mailbox.createdA new mailbox is provisioned on a domain
mailbox.deletedA mailbox is deleted
mailbox.quota_warningA mailbox crosses 80% of its quota
mailbox.suspendedA mailbox is suspended (subscription lapse, abuse, etc.)
subscription.activatedA subscription becomes active
subscription.cancelledA subscription is cancelled
subscription.expiredA subscription period ends
subscription.upgradedA subscription is upgraded to a higher tier
domain.dns_verifiedAll required DNS records pass verification
domain.dns_failedA previously-verified domain falls out of compliance
migration.completedAn IMAP migration finishes successfully
migration.failedAn IMAP migration ends in failure
email.sentAXO's queued send job successfully handed the message to the relay (post-API, pre-SES)
email.failedThe send permanently failed inside AXO (suppression, inactive domain, retries exhausted)
email.deliveredSES handed the message off to the recipient MTA
email.bouncedThe recipient MTA rejected the message (Permanent or Transient)
email.complainedThe recipient flagged the message as spam

Creating a subscription

curl -X POST https://app.axoemail.com/api/v1/company/webhooks \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "production-events",
    "url": "https://yourapp.com/webhooks/axo",
    "events": ["email.sent", "email.failed", "email.delivered", "email.bounced", "email.complained"],
    "secret": "your-shared-secret-min-32-chars"
  }'

Payload shape

Every event arrives as a POST with this envelope:

{
  "event": "email.bounced",
  "timestamp": "2026-05-08T18:00:00+00:00",
  "data": {
    "message_id": "010f019008e92c34-...-000000",
    "email_id": 14821,
    "from_email": "[email protected]",
    "recipients": ["[email protected]"],
    "reason": "Bounce (Permanent/General): [email protected]",
    "bounce_type": "Permanent",
    "bounce_sub_type": "General",
    "details": { "...": "raw SES bounce object" },
    "ses_timestamp": "2026-05-08T17:59:42.123Z"
  }
}

Verifying the signature

Every request includes X-Webhook-Signature (hex HMAC-SHA256 of the raw request body, keyed with your secret) and X-Webhook-Signature-Algorithm: sha256. Reject any request whose signature doesn't match.

// PHP
$expected = hash_hmac('sha256', $rawBody, $secret);
if (!hash_equals($expected, $request->header('X-Webhook-Signature'))) {
    return response('', 401);
}

// Node.js
const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected, 'hex'),
                            Buffer.from(req.get('X-Webhook-Signature'), 'hex'))) {
  return res.status(401).send();
}

Verify against the raw request body, not parsed-then-re-encoded JSON — formatting differences (whitespace, key order) will produce a different hash.

Best practices. Respond 2xx within ~10 seconds (queue the work in your app if needed). Dedupe by (message_id, event) — duplicates are possible during retries. Be tolerant of unknown event types — log and 200; new events ship without breaking existing subscribers.

Open and click tracking is by design app-side

AXO Email does not provide email.opened or email.clicked as webhook events, even though the underlying mail relay technically supports it. Reasoning:

  • No content modification. Email body is byte-exact what you submitted. No injected pixels, no link rewrites by AXO.
  • No third-party redirector domain visible to your recipients (no r.<region>.awstrack.me in your URLs).
  • Per-app data ownership. Your tracker DB is yours alone — AXO doesn't sit between you and your engagement data.
  • Brand-consistent. Your tracker host (e.g. track.yourdomain.com) lives in your stack.

The pattern: inject your own pixel and rewrite <a href> links to a redirect endpoint you control, before submitting the message to AXO. DKIM stays valid because AXO signs after your modifications. Detailed walkthrough is available on request — contact your account manager.

Using the migration wizard

Open from Admin → Overview ("Start migration") or the shortcut __openMigrationModal(). Four steps:

  1. Pick your old provider (Gmail, Google Workspace, Outlook, Microsoft 365, Fastmail, any IMAP).
  2. Enter old-account credentials or an app password if you have 2FA. We only request read access.
  3. Watch the live event stream as we copy mail, contacts, and (optionally) calendar events.
  4. Done — we also set up 30-day forwarding from your old account.

Typical migration of a 50 GB mailbox completes in under 3 hours. Read/unread state and folder structure are preserved.

Concierge migration

The $49 Concierge add-on at signup includes white-glove migration. Our team handles DNS, imports mail, configures your devices, and confirms when you're ready to send. Enterprise customers get Concierge free.

Install as a PWA

The web app is a Progressive Web App. On supported browsers (Chrome, Edge, Safari) you'll see an install banner at the bottom-right of mail — click Install to add AXO to your home screen or dock.

Once installed, the app gets an offline cache of the shell and most recent mail, plus push notifications (you'll be asked to grant permission on first install).

Native mail apps

AXO works with any IMAP/SMTP client. See our setup guide for step-by-step on iOS Mail, Android Gmail, Apple Mail, Outlook, Thunderbird, and generic IMAP. Server settings:

  • IMAP: imap.axoemail.com · port 993 · SSL/TLS
  • SMTP: smtp.axoemail.com · port 465 · SSL/TLS

Keyboard shortcuts

KeyAction
j / kNext / previous message
EnterOpen selected
cCompose new message
rReply
eArchive
#Delete
sStar / unstar
zSnooze
/Focus search
g iGo to Inbox
g sGo to Starred
g tGo to Sent
g dGo to Drafts
g ,Go to Settings
?Show shortcut help
EscClose modal / back
⌘B / ⌘I / ⌘UBold / Italic / Underline (in compose)
⌘⏎Send message (in compose)

Search operators — full reference

OperatorAcceptsExample
from:stringfrom:[email protected]
to:stringto:support@
subject:string (quote phrases)subject:"board deck"
label:label keylabel:receipts
folder:folder namefolder:archive
has:attachmenthas:attachment
is:starred, unreadis:unread
not:stringnot:newsletter
before:ISO datebefore:2026-01-01
after:ISO dateafter:2025-12-01

File type support

The Files hub groups attachments by category:

  • Images: png, jpg, jpeg, gif, webp, svg, heic
  • PDFs: pdf
  • Documents: doc, docx, odt, txt, md, rtf
  • Spreadsheets: xls, xlsx, csv, ods, numbers
  • Other: zip, rar, 7z, tar, gz, mp3, wav, mp4, mov, avi, fig, everything else

Max attachment size is 50 MB per file, 100 MB per message total (Enterprise: 200 MB / 500 MB).

Have more questions? Check the FAQ or contact support — we reply in 2 hours during business hours.