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.
__axoStartTour() in the browser console.
Create an account
Visit signup and complete the five-step wizard:
- 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.
- Plan — Starter, Business, or Enterprise, billed monthly or yearly. You can change this later.
- Setup path — DIY (free) or Concierge ($49 one-time, we handle the DNS work).
- 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.
- 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 × 2 —
mx1.axoemail.com(priority 10) andmx2.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).
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:
| Operator | Example | What it does |
|---|---|---|
from: | from:ada | Sender 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:receipts | Message has the label |
has: | has:attachment | Message has attachments |
is: | is:starred · is:unread | State flags |
folder: | folder:sent | Scope to a specific folder |
before: | before:2026-04-01 | Date cutoff (ISO date) |
after: | after:2026-01-01 | Date start |
not: | not:newsletter | Exclude 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 accountto 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
- Customers —
GET / POST / PUT / DELETE /customers. CRUD for the people whose mail you host. - Domains —
GET / POST /domains,POST /domains/{id}/verify-dns,POST /domains/{id}/generate-dkim. DNS verification and DKIM key generation. - Mailboxes —
GET / POST / PUT / DELETE /mailboxes,POST /mailboxes/{id}/change-password,POST /mailboxes/{id}/import(IMAP migration from any provider). - Aliases —
GET / POST / PUT / DELETE /aliases. - Subscriptions —
GET / POST / PUT /subscriptions,POST /subscriptions/{id}/cancel,POST /subscriptions/{id}/reactivate. - Packages (read-only) —
GET /packages. - Usage —
GET /usage,GET /usage/domain/{id}. - Webhooks —
GET / 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:
| Event | Fires when |
|---|---|
mailbox.created | A new mailbox is provisioned on a domain |
mailbox.deleted | A mailbox is deleted |
mailbox.quota_warning | A mailbox crosses 80% of its quota |
mailbox.suspended | A mailbox is suspended (subscription lapse, abuse, etc.) |
subscription.activated | A subscription becomes active |
subscription.cancelled | A subscription is cancelled |
subscription.expired | A subscription period ends |
subscription.upgraded | A subscription is upgraded to a higher tier |
domain.dns_verified | All required DNS records pass verification |
domain.dns_failed | A previously-verified domain falls out of compliance |
migration.completed | An IMAP migration finishes successfully |
migration.failed | An IMAP migration ends in failure |
email.sent | AXO's queued send job successfully handed the message to the relay (post-API, pre-SES) |
email.failed | The send permanently failed inside AXO (suppression, inactive domain, retries exhausted) |
email.delivered | SES handed the message off to the recipient MTA |
email.bounced | The recipient MTA rejected the message (Permanent or Transient) |
email.complained | The 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.
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.mein 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:
- Pick your old provider (Gmail, Google Workspace, Outlook, Microsoft 365, Fastmail, any IMAP).
- Enter old-account credentials or an app password if you have 2FA. We only request read access.
- Watch the live event stream as we copy mail, contacts, and (optionally) calendar events.
- 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
| Key | Action |
|---|---|
| j / k | Next / previous message |
| Enter | Open selected |
| c | Compose new message |
| r | Reply |
| e | Archive |
| # | Delete |
| s | Star / unstar |
| z | Snooze |
| / | Focus search |
| g i | Go to Inbox |
| g s | Go to Starred |
| g t | Go to Sent |
| g d | Go to Drafts |
| g , | Go to Settings |
| ? | Show shortcut help |
| Esc | Close modal / back |
| ⌘B / ⌘I / ⌘U | Bold / Italic / Underline (in compose) |
| ⌘⏎ | Send message (in compose) |
Search operators — full reference
| Operator | Accepts | Example |
|---|---|---|
from: | string | from:[email protected] |
to: | string | to:support@ |
subject: | string (quote phrases) | subject:"board deck" |
label: | label key | label:receipts |
folder: | folder name | folder:archive |
has: | attachment | has:attachment |
is: | starred, unread | is:unread |
not: | string | not:newsletter |
before: | ISO date | before:2026-01-01 |
after: | ISO date | after: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).