All help articles

Plans, free mail and signup

Zappocity sells mail by plan. Every customer (a tenant) is on exactly one plan, and the plan decides how much they may use and which features they get. The SaaS administrator sets all of it; nothing is hard-coded.

Managed from Zappocity

Mailocity's plans, their limits and their features are managed in Zappocity: in the admin panel under Products → Mailocity → Limits and features (and New plan), with PUT /v1/platform/products/mailocity/plans/{plan} or corpsuite zappocity plan set. Prices are set there too. For one customer, open their organization and choose Features on the subscription to switch features on or off for that team only, over its plan (/v1/platform/subscriptions/{id}/features, corpsuite zappocity subscription features set). Mailocity keeps and enforces them, so mail works even if Zappocity cannot be reached; team admins can still change features for single users within what the team has. The Mailocity Plans page keeps what signup offers.

Kinds of plan

KindUsersFor
Free1Free mail on one of the platform's shared domains
Solo1One person paying for mail, optionally on their own domain, with no team to set up
TeammanyA company or group with several users and domains

Three plans are created for you: Free, Solo and Team. You can change their names, limits and features, add more plans of any kind (for example a "Student" free plan or a "Team 100" plan), stop offering a plan, and delete a plan nobody is on.

Limits

Each plan sets:

Any limit can be Unlimited (tick the box beside it; -1 in the API and command line): unlimited storage, sending, aliases, domains, users and so on.

A team can have its own limits in place of its plan's (the team's page, Team limits; corpsuite tenant limits set TEAM quotaBytes:=-1): the per-user ones (storage, largest message, sending, recipients, aliases) and the team's own (domains, aliases). The team's user cap is its seat limit, which can be unlimited too.

Storage, largest message, the three sending limits and the user's aliases (and their aliases on shared domains) can also be set for one user (the user's page, Limits; corpsuite mailbox limits set). A user's own limit comes first, then the team's, then the plan's. A team's admins can only lower their users' limits. See Sending limits.

Changing a plan's limits applies to everyone on it immediately. Lowering a limit never deletes anything; it only stops further growth (for example, a mailbox over its new quota stops accepting mail until it is under it again).

What happens at a limit:

LimitWhat the user sees
StorageSenders get "mailbox full" and retry later; IMAP and JMAP report over quota
Largest messageThe sender gets "message too big"
Sending per hour or dayThe mail app gets "sending limit reached, try again later"
Recipients per messageRecipients past the limit are refused
Users, domains, aliasesThe admin API answers 409 with the limit, the number used and the maximum

Features (entitlements)

A plan switches features on from a fixed list: webmail, IMAP, mail-app sending (SMTP submission), plus-address folders, forwarding (mail filters that redirect to other domains), calendar, contacts, tasks, notes, chat on the shared or a dedicated server, meetings, files, API access, a dedicated IPv4 address and priority support.

IMAP, mail-app sending, plus-address folders, forwarding, team administration, team signup and API access are enforced today: a free plan without IMAP, for example, refuses mail-app sign-ins with "not included in your plan". The others can be set on plans now and take effect as each feature ships.

Features for one user

A user can have fewer or more features than their plan. On the tenant's page, Features on a user lists them: untick one of the plan's to turn it off for that user only (for example IMAP for a shared front-desk account), or tick one the plan lacks to give it to that user alone. A team's own admins can turn plan features off for their users in the domain admin panel, but only the operator can give more than the plan. From the command line: corpsuite mailbox features USER and corpsuite mailbox features set USER off:='["imap"]'. The change applies at the user's next request; mail apps already signed in over IMAP stop at their next account check.

Shared domains and free mail

Shared domains are the platform's own domains, such as freemail.example. Accounts of any customer can have addresses there, which is how free mail works. You choose which shared domains are offered on the signup page. Users on a plan with Own aliases can take aliases on shared domains open for signup (webmail, Settings → Addresses); reserved names are refused as at signup, and the plan's and user's shared-domain alias limits apply. Team admins and the admin API make aliases only on the team's own domains. A shared domain cannot be removed while anyone has an address on it.

A shared domain can become one team's own (for example the platform's own domain for the platform's own team): Give to a team on its page (corpsuite shared-domain assign DOMAIN tenantId=ID). Every mailbox and alias on it must already be that team's; it becomes the team's proved domain, with its settings, keys and reports, and leaves the signup page. A team asking for a shared domain itself is told it is shared.

Signup

Signup is closed until you open it. There are two switches:

A plan appears on the signup page only when it is marked for signup and the matching switch is on. Protections:

Through Zappocity

While single sign-on is on, accounts are made with a Zappocity account. The signup page first asks people to Continue with Zappocity: they sign in at zappo.city, or create their account there (confirming its email), and come back to choose their address. The mailbox has no password of its own: it signs in through that Zappocity account, and mail apps use app passwords. No verification code or captcha is asked on the way back, since the confirmed Zappocity account stands for them; the other protections above still apply. The sign-in lasts 30 minutes and makes one account.

Approving signups

Signups can wait for your approval before they work; see Sign-in security.

Upgrading: free to solo, solo to team

A customer converts by moving to another plan. Free to solo keeps their address and adds whatever solo includes, such as their own domain. Solo to team keeps everything and allows more users; the seat limit rises to the team plan's user limit unless billing sets a different number. Free to team works the same way.

Moving to a smaller plan is refused while the customer uses more than it allows (for example, two users on a one-user plan); the answer says which limit is in the way.

Retiring a plan

Retire a plan you no longer sell but still honour, such as an early-adopter plan: Plans → Retire in the Mailocity panel, with a note on why (corpsuite plan set early retired:=true retiredNote="Honoured for 2026 teams").

A plan with teams on it cannot be deleted; retire it instead.

Where to set it

Use the SaaS admin panel at /admin: Plans for plans, limits, features and what signup offers; Settings for the signup switches, reserved names and per-network limit; Shared domains for the domains on offer; and a tenant's page for its plan, status and usage. The public signup page is at /signup. The in-app upgrade button comes with webmail. The same settings are in the provisioning API:

SettingAPI
Plans, limits and featuresGET/POST /v1/plans, GET/PATCH/DELETE /v1/plans/{plan}, GET /v1/entitlements
Open or close signups, reserved names, per-address limitGET/PATCH /v1/settings
Shared domainsGET/POST /v1/shared-domains, GET/PATCH/DELETE /v1/shared-domains/{domain}
Move a customer to another plan, activate a paid signupPATCH /v1/tenants/{tenantId} with plan or status
A customer's usageGET /v1/tenants/{tenantId}/usage

The public signup page uses GET /api/signup/options and POST /api/signup (see api/signup.yaml).