Multi-tenant SaaS
Email for every customer, from one API key
You bring the product and the customers. We give each of them an address, their own inbox and a wall around their mail.
Email in
- Spacesspc_7k2m
- Mailboxestom@gmail
Your code
Your platform
Customers, product, UI
onSignup(customer)
Email out
- Wildcard domainsacme.you.io
- Pacing5k / day
- Suppressionsper customer
Wildcard domains
An address the minute they sign up
Connect *.yourapp.com once. Every customer gets a subdomain from your signup handler, sending and receiving before anyone touches DNS.
Wildcard domains- HHarbourlyJust now
harbourly.northwind.io
hello@Welcome aboard, Tom - RRheinbau17m ago
rheinbau.northwind.io
support@Re: Booking for Thursday - LLindmetallYesterday
lindmetall.northwind.io
ava@Your quote for RFQ 4471 - WWerkhaus2 Sep
werkhaus.northwind.io
notifications@Your weekly summary
+ 1,248 more, each created by one API call at signup
Spaces
Nobody sees anybody else's mail
Each customer's domains, inboxes and threads live in a space of their own. When one customer emails another, each gets their own copy.
Spaces“Quote for the Q3 order” · Message-ID: a7f2c1@harbourly.com
Tojana@rheinbau.de
tom@harbourly.com
thr_9fd21a· own thread
email.sent · spc_7k2m
jana@rheinbau.de
thr_04be77· own thread
email.received · spc_1xq8
One message, a copy in each space. Tom sees what he sent, Jana sees what arrived — and neither thread ever looks across.
Mailboxes
Answer from the inbox they already use
Customers on Gmail or Outlook approve once, on a consent screen with your name on it. The inbox lands in their space.
MailboxesConnected through Northwind, your OAuth app
- tom@harbourly.comHarbourlyconnected
- jana@rheinbau.deRheinbauconnected
Pacing
Their limits, under your ceiling
Cap the whole platform once. Customers set their own hours and limits from your product, and can only ever go below yours.
PacingYour workspace · every customer
Every rule that matches a send gets a say. A customer’s own can only hold their mail back further, never lift your ceiling.
Suppressions
An opt-out from one customer stays theirs
Unsubscribing from one of your customers stops their mail, not everyone's. A hard bounce stops it for all of them, because the address is gone.
SuppressionsIris Kaplan
Unsubscribed from Harbourly
On Harbourly’s listThe next email to Iris
- HarbourlyThe spring newsletterNot sent
- RheinbauYour booking for ThursdaySent
Put together
A new customer, in three calls
const space = await aiinbx.spaces.create({ name: customer.name, external_id: customer.id,}) await aiinbx.domains.create({ name: `${customer.slug}.northwind.io`, space_id: space.id,})const { url } = await aiinbx.mailboxes.connect({ provider: "google", app_id: NORTHWIND_APP, // your consent screen, not ours space_id: space.id, return_to: "https://app.northwind.io/settings/inbox",})const customer = await customerBySpace(event.space_id) await customer.notify(event.data.thread_id)