Ask us something, and see first what we keep.
Two things bring people here: an Enterprise quote, which is the one plan with no listed price, and a voucher, which is how you pay for Haven without a card. Anything else is welcome in the same box.
Before you type: this form stores what you write and nothing else. No IP address, no
browser string, no referrer, no cookie, no identifier of any kind — the server's own
routes/sales.js says so and the row it writes has nowhere to put one. A
newsroom or a legal team should be able to ask about an encrypted messenger without the
asking becoming a record that they were considering it. What we do keep is
below the form, in full.
Tell us how to reach you, and what about
There is no autoresponder and there cannot be one: this server has no mail path at all — no SMTP client, no provider, no queue — so nothing here can send you anything. Your enquiry lands on an operator's console and a person answers it by whatever route you gave us. You will not get an automatic acknowledgement, and its absence does not mean the message went missing.
Two ways to reach us that need no script at all
Send the request yourself
The endpoint is public, unauthenticated and takes one JSON object. Against the instance
you would be using, that is a POST to /api/sales/enquiry with
Content-Type: application/json and a body of
{"contact": "…", "seats": 50, "message": "…", "source": "enterprise"} —
seats optional, source either enterprise or
contact. A successful send answers 201 and
{"ok": true}, and deliberately returns nothing else: no id, no queue
position, nothing that would let a stranger count how much business we are getting.
The same route also accepts Content-Type:
application/x-www-form-urlencoded — that is what the form on this page uses when
you have scripting off — so
contact=…&seats=50&message=…&source=enterprise&redirect=/contact.html
works just as well. The two differ in one place, deliberately: a form body has no types,
so on that path seats arrives as characters and is converted, while the JSON
path still refuses "50" as a string. redirect is honoured only
for a form body, and only to a path on this site — an open redirect on an
unauthenticated public endpoint is a phishing link with our hostname on it.
The limit is five an hour from one address, which is the tightest rate limit anywhere in
this server, and the body is capped at 16 KB above which you get a 413. If
you are coming through Tor you are sharing that address with other exit users, so a
refusal there is not about you.
Use the address in security.txt
/.well-known/security.txt carries the contact route the operator of this instance publishes, in the format RFC 9116 defines, and it is the right one for a vulnerability report in particular — a security finding should not be sitting in a sales queue. Read the note at the top of that file before you trust the address in it: as this repository ships, that line is a value the operator has to set, and the file says so rather than pretending otherwise.
The whole row, named
- What you typed in How to reach you, truncated at 200 characters.
- Your message, truncated at 2,000 characters.
- The seat count, if you gave one.
- Which of the two boxes you ticked —
enterpriseorcontact— so an operator can sort a queue by it. - The time it arrived, to the second.
- Whether somebody has dealt with it yet, and which member of staff did.
And the things it does not keep, which is the shorter list to check
No IP address, no User-Agent, no referrer, no fingerprint, no cookie. The rate limiter sees the address your request arrived from — it has to, that is what a rate limiter is — and forgets it when the hour closes; nothing about the sender reaches the table. There is no account link either, because the form takes no sign-in.
Three characters classes are stripped from what you send before it is stored: control bytes, ANSI escape introducers, and the Unicode bidirectional overrides. Not to censor anything — they are removed because their only purpose in a hostile message is to make stored text display in an order it is not stored in, on a terminal or in the console an operator reads it on. Ordinary text, in any language, passes through untouched.
Where it goes, and how long it stays
Into sales_enquiries on the same database that runs the instance, read
through the operator console by a member of staff, whose reading of it is recorded in an
append-only audit log. The account-facing disclosure panel lists that table by name and
says exactly this about it, which is the copy you can check against your own database
rather than against this page.
There is a hard ceiling of 2,000 unhandled enquiries on the whole instance. Past it the form refuses with a sentence telling you so, rather than accepting your message and dropping it — because an endpoint that silently discards is worse than one that says no. Nothing sweeps this table on a timer; an enquiry stays until an operator clears it.
What is actually quoted, and what is not negotiable
Enterprise is the one plan in the catalogue marked custom, which is why it has
no price on the pricing page and a conversation instead of a
button. It bills from 50 seats with no ceiling above that.
What a quote can move
The price, the seat count, the billing arrangement and the payment method — including invoicing and vouchers rather than a card. A dedicated instance. Written terms on what the server holds, which for us means writing down the same list this site publishes and signing it. A support commitment with a number in it and a remedy attached, which the listed plans deliberately do not have — the service level page says what they do have instead.
What no amount of money moves
The cryptography, which is the same code at every tier including the free one. The metadata: conversation membership stays an indexed plaintext table and timestamps stay at one-second resolution on a dedicated instance exactly as they do on a shared one. The absence of an audit. And the fact that the JavaScript doing your encryption is served by the machine you would be hiding from — a dedicated instance changes who operates that machine, not whether it has to be trusted. The threat model is the page to read before the quote.
Buying Haven without a framework
Haven is not on a public-sector framework, and most purchases of it are small enough that your own organisation's rules decide how you buy — a quote, or three, rather than a tender. This is what you can have from us for that, without asking anybody's permission.
- A written quote for the plan, the seats and the period, on request through the form above. Choose "Enterprise — a quote" and say what your finance team needs on it.
- The data processing agreement, already published and the same for everybody: dpa.html.
- The list of every third party that touches the service, and what each receives: subprocessors.html.
- What the server holds about each person, counted from the live schema: privacy.html. And what it does not protect against: threat-model.html.
- Paying without a card: prepaid vouchers, bought once and handed out, which suit a budget that is spent in one go. See how paying works.
What we cannot give you: a framework listing, a certification (there is none — see security), or advice on your own procurement rules, which your finance lead knows better than we do.