Plans

Sharing a secret is free, with or without an account, and a free account comes with an encrypted vault. One tier, Pro, is paid, and the same licence covers an instance you run yourself.

Pro on this service is 35 US dollars a month. Candidate price, owner to confirm. Anchored on OneTimeSecret’s paid tier; the amount charged is the one pay.me.at shows at checkout. Payment is taken by pay.me.at, never on this page.

Anonymous, signed in, Pro, self-hosted

Hitting a limit gets a refusal, never a charge. There is no metered overage, so you cannot spend more than the plan by accident.

Anonymous

No account, nothing to install.

Not priced yet

  • 1 view: anonymous secrets are always burn-after-read.
  • Up to 24 hours before it expires on its own.
  • Up to 16 KB of ciphertext.
  • A one-shot burn token, shown once, that destroys the secret without the link and without an account.

Signed in

Free, with GitHub or Google. Includes the vault.

Not priced yet

  • A vault for up to 50 secrets, encrypted in your browser under a key only your passphrase or recovery key opens.
  • The last 10 versions of every item, on every plan, with restore. It locks itself after 15 idle minutes.
  • Up to 100 views before it burns.
  • Up to 30 days.
  • Up to 64 KB of ciphertext, and defaults you can save.
  • A metadata-only history you can burn from, and your own remaining quota before you meet a ceiling.

Pro

Everything above, plus a signed licence key.

Not priced yet

  • Approving a CLI sign-in in your browser, with explicit capabilities and expiry before a credential is issued.
  • Minting machine credentials for the REST surface. Shown once at mint, stored only as a hash.
  • Opening an ask link, so someone can send you a secret. They encrypt in their browser; only you can open it.
  • Issuing access to one *.me.at app: a scoped, audience-bound credential with an expiry, for a customer or for your own machines.
  • Rotating one through a bounded handover window, so both credentials work while every consumer is updated.
  • Minting a key credential for a machine: a key split in two, one half in the credential and one half here, wrapped by a key only the credential holds.
  • Your name and accent on the pages your recipients open. Text and one colour only, so the page stays free of third-party requests.
  • Claiming a hostname you control for your links.
  • Proving it with a DNS TXT record, after which that hostname shows your brand.
  • The audit trail over this account: created, revealed, burned, expired. Id, event and time, nothing else.

How a key is issued →

Self-hosted

The same licence, on your infrastructure.

Not priced yet

  • Verification is a local signature check. Serving a request calls no licence server, and your usage is not reported anywhere.
  • Storage is your own Redis or Upstash, so the data stays wherever you run it.
  • The public, no-account features work with no key at all. An unlicensed instance still shares secrets, and every account on it still gets a vault.
  • The deployment files ship with the app: a compose file, a reverse-proxy config, and an env template listing every variable it needs.

Not built yet

  • A public download. The setup is decided but the source export is not published yet, so this starts with a conversation.

What running it involves →

The Pro column lists exactly the actions the service puts behind a licence. It is generated from the same code that enforces the licence, so it cannot drift from what the service does.

What a licence can take, and what it cannot

A licence gates the creation of new paid capability. It never gates seeing, retrieving, or destroying what already exists.

So if a key lapses (or was never there), these all keep working, exactly as before:

  • Reviewing a pending CLI sign-in and the access it requests.
  • Denying a pending CLI sign-in at any time, including after a license lapses.
  • Listing the machine credentials this account holds. Revoking one needs an id, and the id comes from here.
  • Revoking any of them, whatever state your licence is in.
  • Listing the ask links you have open.
  • Collecting a secret someone already sent you. It is ciphertext you already own, and the key never left your browser.
  • Cancelling an open ask link.
  • Listing every fleet access grant you have issued. Revoking one needs an id, and the id comes from here.
  • Revoking any of those grants.
  • Seeing who can reach what, and which credentials are about to expire.
  • Every decision made about your fleet credentials, honoured or refused, with the reason. This is where a leaked key shows up, so it is never behind a licence.
  • Listing your key credentials. Only their public halves are stored in a form anyone could read.
  • Revoking one. The server half is deleted, and the half in every copy of the credential opens nothing without it.
  • Sealing a secret to a key credential you already hold, so the machine holding it can open that secret.
  • Seeing the brand and domain you configured, including after a plan lapses.
  • Releasing a claimed hostname, at any time.
  • Reading your own remaining quota.
  • Setting up your vault. Storing your own secrets is never a paid feature; a plan only changes how many items it holds.
  • Unlocking your vault, whatever state your licence is in.
  • Listing every item in it.
  • Opening any item, with its kept history.
  • Adding items, up to your plan’s ceiling. Over it, the next new item is refused and every existing one keeps working.
  • Editing an item, or restoring an earlier version of it.
  • Deleting an item and its history.
  • Changing your vault passphrase or replacing your recovery key.
  • Deleting the whole vault and everything in it.

The machine API that a credential authenticates against has no licence check at all, so a scheduled job holding a valid key keeps working when an entitlement changes elsewhere. Putting revocation behind the licence would not disable any credential. It would only stop you from disabling one, at the moment you most need to.

When Pro lapses you can no longer create paid things such as a new key or a new ask link, and the audit trail closes. None of that takes away anything you already hold.

What a security review will ask

The questions a reviewer usually sends before a tool is allowed near a credential.

  • Plaintext never reaches the service. A share link is stored as a format version, ciphertext and an initialisation vector, with your chosen expiry set on the row. A vault item is stored the same way, beside an opaque id, a revision number and timestamps: its name, tags and notes are encrypted with its value.
  • Storage is Redis or Upstash, and nothing is written to a relational database. On your own instance, the data stays wherever you run it.
  • The pages that can hold plaintext (the share form, reveal, ask fulfilment and the vault) send no analytics at all and run under a first-party-only content security policy, which a test checks.
  • No recipient, title or IP address is stored beside a secret, and no vault item name is stored readable. An account builds up lifecycle rows of an id, an event and a time, and nothing else.
  • A published inventory lists what a stolen datastore backup or a stolen source export would give an attacker. Share links cannot be decrypted from a backup, because their keys live in URL fragments. A vault can only be attacked offline by guessing its passphrase, which is why setup requires a long one and the key derivation is deliberately slow.
  • Hitting a limit gets a refusal, never a charge. There is no metered overage.
  • Vulnerability reports go to the address in /.well-known/security.txt, and the threat model lists what it does not cover.

The questions that cannot be answered with a yes yet are listed under Not built yet, with how far along each one is.

Getting Pro

Self-serve. A signed-in account starts here and finishes checkout on pay.me.at.

On this service

35 US dollars a month, for your account. Candidate price, owner to confirm. Anchored on OneTimeSecret’s paid tier; the amount charged is the one pay.me.at shows at checkout.

On your own instance

Sized by seats: a seat is one account that uses a Pro capability on your instance. Up to 5 seats is personal, 25 seats is team, 250 seats is business; the most one licence covers is 250. Priced per seat at checkout. The seat count you buy is carried in the licence and sets your tier. Going over refuses the next new seat and touches nothing that already works.

A self-host purchase comes back as two values: a signed key for your instance, and the public key it is verified against. Both are set in the environment of the instance you are running (ME_AT_LICENSE_KEY and ME_AT_LICENSE_PUBLIC_KEY), and it picks them up on restart. Something else in mind? Write to the maintainer at mcdougald.job@gmail.com.

Verification happens offline

The licence is never checked against a server, so our outages cannot become yours.

No authority call

The key is a signature, checked locally against the public key you were given. Serving a request makes no call to any licence server, so nothing about your instance's availability depends on ours, and nothing about your usage is reported anywhere.

A lapse does not brick it

An expired key is honoured for 7 more days before the creating half of the product closes. Everything in the list above keeps working regardless, and always did.

The grace window also covers clock skew, so a slightly wrong clock keeps the instance serving.

Run it yourself

Running your own instance takes the operator out of the threat model.

The same licence applies to an instance you run. Storage is standard Redis or Upstash, the deployment files ship with the app (a compose file, a reverse-proxy config and an env template), and the public, no-account features work with no key at all.

Self-hosting is decided but not yet downloadable. The licence, the deployment setup and the export boundary are settled; the public source export is not out. The footer names the licence the core ships under.

Where the ceilings are going

These are the ceilings each tier carries. Pro on this service is the personal tier; a self-hosted licence carries the tier its seat count names.

Ceilingfreepersonalteambusiness
Ask linksnot included5 a day15 a day25 a day
Live fleet access grantsnot included31560
Machine credentialsnot included31020
Items in your vault5050010001000

Only the ceilings that actually move are listed. Everything absent from this table is the same on every tier, including all four of the controls a tier is never allowed to move: revoking, listing, collecting what you already own, and the access log that shows a leaked credential being used.

Not built yet

In progress

A first-party CLI
Credential storage and the device sign-in flow exist as policy code with no binary that calls them. Until a CLI ships, the REST API is driven with the curl recipes in MACHINE.md.
SSO
OpenID Connect sign-in through your own identity provider is built and stays off until an instance is given an identity-provider client, which only the operator can create. Sign-up goes through an identity provider either way.

Decided, not built

A self-host download
The deployment setup, the licence and the export boundary are decided and written down, but the public source export is not out. For now, running it on your own network starts with a conversation.

Under consideration

Reading vault items from a CLI or CI job
Vault items open only in a browser today. A CLI or CI job would need the vault key on a machine, and how a machine may hold it safely is still an open decision.
Shared vaults, workspaces and roles
A self-hosted licence counts seats, but every vault, secret, machine key and ask link belongs to exactly one account. Sharing a vault between people needs an organisation model and a way to share a vault key, and neither exists yet.
Log export
The audit trail is per account, and each row is an id, an event and a time. Streaming it to your own log destination is unbuilt.
A DPA and compliance attestations
No data processing agreement has been drafted and no certification has been pursued. What exists is the threat model, the blast-radius inventory and the source. Some reviewers will accept that and some will not.
Invoicing and an SLA
Checkout runs through pay.me.at. Invoices on your own paperwork, procurement forms and an uptime commitment are all unbuilt.

Questions

Can you read my secrets?
Not from what we store. A vault item and a share link are both stored as ciphertext. The vault key is wrapped under your passphrase and a recovery key that never reach us, and a share link’s key travels in the URL fragment, which a browser never sends. The limit: this server sends the JavaScript that handles those keys, so a compromised server or CDN could in principle ship code that steals them. Only a client you have audited, or an instance you run yourself, closes that gap.
What if I forget my vault passphrase?
Then the vault cannot be opened, by you or by us. It unlocks with your passphrase or with the recovery key shown once at setup, and either one can set a new passphrase. Lose both and the data is gone for good. That is the cost of a server that never holds a key, and setup asks you to save the recovery key before the vault exists.
Is this a password manager?
No. There is no autofill and no browser extension, and nothing fills a login form for you. It is a place to keep the credentials a person or a team looks after (API keys, env vars, recovery codes, shared logins) and a safe way to hand one over.
What do you log?
Nothing that identifies anybody. No recipient, title or IP address is stored beside a secret, and vault item names are encrypted. A signed-in account builds up lifecycle rows of an id, an event and a time (created, revealed, burned, expired, and every write to the vault), and the pages that can hold plaintext send no analytics at all.
Where does the ciphertext actually sit?
In Redis or Upstash. A share link is one key with the expiry you chose. A vault is a key per item plus the wrapped vault key, kept while you use it and deleted after 13 months untouched. Nothing goes into a relational database. If you run it yourself, the datastore is yours, and so is the residency answer.
What if a link scanner opens a share link first?
It cannot spend it. Opening a share link shows a static page, and only an explicit reveal (a POST) burns the secret. This does not rely on a list of known scanners, so it also holds for crawlers nobody has heard of yet.
How much does a dead link give away?
Nothing. Burned, expired, never existed, or lost a race with another reader: all four get the same response, so there is no way to tell whether an id was ever real. For the same reason a wrong passphrase reveals nothing, and repeated guessing destroys the secret.
Can it manage access to the other me.at apps?
Yes, and it is how the fleet itself does it. A fleet access credential names one app as its audience (never trust.me.at itself), carries a closed scope set, and expires on a date you choose. Each app checks it through one shared verifier that denies a request when the issuer cannot be reached, and a revoke is honoured within a minute. Issuing one is Pro; listing and revoking never depend on a licence. The issuer indexes what it issued, never what it carried: no app’s secrets pass through it.
Do you have SSO, seats or shared vaults?
Partly. Sign-in through your own identity provider over OpenID Connect is built and switched on per instance once an identity-provider client is configured. A self-hosted licence is sized by seats. Every vault and secret still belongs to exactly one account, and there is no shared workspace or role concept yet.
What happens when a licence lapses?
Creating new paid things stops after a grace window, and nothing else changes. Your vault keeps opening, editing and deleting. Listing and revoking machine keys, cancelling an open ask link, collecting a secret someone already sent you and checking your remaining quota all keep working, and a test fails if one of them moves behind the licence.
Can we run it on our own infrastructure?
Yes, inside your own network: the deployment files ship with the app, storage is standard Redis or Upstash, and the licence is checked offline with no call home. The public source export is not published yet, so for now it starts with a conversation instead of a download.

What the encryption does not cover

What this service promises: the key never leaves your browser, and we never receive it. It is not "we cannot read your secrets". This server sends the JavaScript that handles the key, so a compromised server or CDN could in principle ship code that steals it. Only a client you have audited, or an instance you run yourself, gives the stronger guarantee. That holds on every plan.

The full threat model

الملفات الأساسية مفعّلة بالفعل. وتبقى التحليلات معطّلة ما لم توافق، في كل مواقع الشبكة. اقرأ سياسة ملفات الارتباط