last updated 15 Sep 2026

We hold other companies’ customer email. Here is exactly what that means.

Written for the person sent here to say no — and for the owner who just wants a straight answer. No badges, no shields. Where the mail lives, who can open a body, how deletion actually works, and the list of things we do not have yet, stated at full size.

If your product sends password resets or invoices, those emails hold your customers’ names and addresses. We keep a searchable copy so you can later answer did it go out, and what did it say? This page is how we hold that copy — and the list of certificates we do not have.

WORDS ON THIS PAGE

body — the contents of an email. envelope — who it was to, the subject, and the delivery receipt. Application — one of your products (the billing site, the app). transport — the mail server or provider you already have. subprocessor — a company we use to run the computers or the network.

Where your data lives

At rest: Canada. Message bodies, metadata and credentials live on Oracle Cloud Infrastructure in ca-toronto-1, operated by YS Progress Inc., a company registered in Canada. Jurisdiction is usually a reviewer’s first question, so it goes first: data at rest is under Canadian law, held by a Canadian legal entity, in a Canadian region. Encrypted backup snapshots (restic, encrypted client-side with keys held by Spoolway) are stored with Cloudflare R2.

In transit: through Cloudflare first. spoolway.com is proxied through Cloudflare — every request, including message bodies posted to the API, reaches the nearest edge node, TLS terminates there, and the traffic is re-encrypted to the Canadian origin. The certificate your browser sees is Cloudflare’s, and an edge node may be anywhere. Run dig spoolway.com and you’ll see exactly that — this page should survive the check, so it says so first.

Oracle Cloud · ca-toronto-1 · at restCloudflare · global edge · in transitEU region · plannedUS region · planned

One region today. Region choice is planned and marked the way everything unbuilt is marked here — dashed, not promised. If your review requires EU residency now, we are not your vendor yet, and we’d rather you know from this page than after you have signed a data processing agreement (the contract that says we handle your customers’ data only on your instructions).

Encryption

The contents of every email, the personal details in templates, and the passwords for your mail server are stored so that a stolen backup cannot be read. For the engineer: not a bare encrypted column, but a versioned envelope — the stored value names which key locked it:

v1.<key_id>.<nonce>.<ciphertext>
  • Everything on the wire is encrypted — the API and the panel always, and sessions to your mail server whenever its transport is set to STARTTLS or implicit TLS (the same kind of lock as a bank website). A transport set to no encryption sends in the clear, and only because its settings say so.
  • Transport credentials are never displayed again after saving — rotating one means pasting a new one.
  • The keys that unlock all of the above live in one file on the server, readable only by the application user. It is not in git and not in the deploy payload — but it is inside the nightly backup root, so a restored backup can decrypt what it contains. Restores are operator-only, and a restore can bring back data erased after that backup was taken; each backup is kept for 35 days. We would rather say that than claim an exclusion a reviewer would not find.

Who can see what

owneradminmemberviewer · read-only · freescoped per Application

An Application is one of your products. Scoping a person to one Application means a contractor sees that product’s mail and nothing else. Viewers are free on every plan — which is a security feature wearing a pricing costume: nobody should share a login because a seat costs money.

Body views are audit-logged. Who, when, where — recorded, with the address of whoever opened it and the account they did it under. Sign in to see your audit log

Each customer’s data is kept in its own locked room. If the software forgets which customer it is serving, it crashes in our tests rather than showing anyone else’s mail. For the engineer: a global query scope that throws when tenant context is missing, not one that silently returns everything:

query without tenant → raise MissingTenantContext · never an implicit "all rows"

Retention and deletion

0Zero is a real setting.Body retention is set on your account and can be overridden per template. It runs from your plan’s maximum — 7 days on Free, 90 on Pro, 365 above — down to zero, which discards the body once the message reaches a final state (swept hourly, not instantly). Zero is the right setting for credential mail. The envelope always stays.
EXPIRED · ON SCHEDULEBody deleted 12 Jun 2026, 04:00 UTCUnder billing-prod’s 30-day policy — a policy event with a receipt, not a loss. The envelope stays: who it was to, the subject, the headers, and the delivery record.purge job ret_2026-06-12_03 · completed 04:00:12Z · body + variables

After a body is deleted from the live archive, a copy can still exist in backups. The backup tail is 35 days. Then that copy is gone too.

Credentials and keys

  • API keys are hashed at rest — stored as a fingerprint, never as the secret itself, shown exactly once at creation. Prefix-indexed so we can look one up without storing the rest.
  • No API key may carry both messages:send and messages:read-content, so a leaked sending key can send mail in your name, but it can never open a stored message body. Abilities are chosen when the key is created and cannot be widened later. There is no wildcard.
  • Revocation is immediate, keys can carry an expiry, and every key belongs to a person — removing someone revokes their keys in the same action:
spw_live_…c419— dev who leftrevoked 14:02Z · audit #8812
  • Two-factor sign-in is available on every account, from your profile. It is encouraged, not required — and because this panel can decrypt bodies, we would turn it on.
No SOC 2. No ISO 27001. No third-party pen test yet.

A small team in Canada, stated at full size because hiding it would cost more than saying it. Certifications attest processes; we’re early enough that you can read the actual processes above instead. Here is the honest ledger:

Practiced today — versioned envelope encryption, key rotation, audited body access, throwing tenant scope, an erasure ledger, keys bound to people.
Planned, not claimed — third-party penetration test, then SOC 2 when enough customers’ reviews require it. If yours does, say so — demand is exactly what changes our mind.
Not pretended — no compliance badges appear anywhere on this site until the paper behind them exists.

Vulnerability disclosure

Report to [email protected]. You’ll get an acknowledgment within 2 business days, a fix or a dated plan within 14 days, and credit if you want it. No PGP key published yet — when there is one, it will live here. No bug bounty — we’d rather say that than imply one.

Subprocessors

A subprocessor is a company we use to run the service — they see some of your data because they host the computers or sit on the network path. The entire list is three:

Oracle CloudAll infrastructure, storage and platform email — data at restCanada
CloudflareCDN, WAF, TLS termination and DNS — sees all HTTP traffic in transit, including API request bodies. R2 storage holds the encrypted backupsGlobal edge
StripePayments — billing data only, never message contentUS
Additions are named here and on the subprocessor page, with 30 days’ notice to account owners. Full subprocessor page →
Questions procurement asks — answered in writing.Security questionnaires, a walkthrough of the data processing agreement, or the question this page didn’t answer: a reply within 2 business days, in writing you can attach to the review file. No call required.
[email protected]