Hand over a secret once.
We never hold the key.
Seal a credential in your client, send a link, and cap it at one read. Ask the recipient for a passphrase or an emailed code before it opens, and get a signed webhook when it does.
Encrypted before it reaches us, or refused
Every payload has to arrive as an envelope sealed in the sender’s client. Anything else gets a 400, not a row in our database.
- The console seals in your browser. Through the API, you seal before the call.
- The key rides in the link’s fragment, which browsers never send to a server.
- A dump of our database yields ciphertext and hashes of retrieval codes.
- We check an envelope’s shape, not that its contents are really encrypted. The security page says what that does and does not prove.
One read, decided in one statement
Cap a secret at one read and exactly one request gets it, even when two arrive together. The read and the recipient check happen in the same conditional UPDATE.
- The console caps every secret it sends at one read.
- Revoke a secret before it is read. Every secret expires.
- Retrieval codes are 256-bit and stored only as a hash.
Check who opens it
Before the secret shows, ask the recipient for a passphrase you chose or a 6-digit code we email them. Set it when you create the secret through the API.
- Checked inside the same statement as the read, so a wrong answer cannot race a right one.
- Wrong answers lock the secret after five tries, or the limit you set.
- Passphrases are stored with scrypt and a per-secret salt.
- Per-API-key IP allowlists fence the sending side too.
Know when it is read, and prove it later
A signed webhook fires when a secret is revealed, with the time and the IP. The audit log records every create, read, revoke, expiry and failed attempt.
- Webhooks are signed with HMAC-SHA256 and retried with backoff.
- Audit history for 90 days on Team and 365 on Enterprise.
- Export it as CSV on Team, or stream it to a webhook or S3 on Enterprise.
Made to be called by code, and by agents
An OpenAPI 3.1 spec, an llms.txt, and responses that tell a script where it stands.
- Quota headers on every metered response. Past the allowance we keep serving, up to twice it, and email you on the way.
- A 402 that names the plan a capability needs, with a link to get it.
- A sandbox key with no signup: 100 operations, 24 hours. Secrets need a claimed account.
- An MCP server is in build. It will have no read tool.
Choose your plan
Start on Developer for free, or take Team for the recipient controls.
Complete for machines. Free forever.
- 10,000 operations / month
- 64 KB payload
- 7-day maximum expiry
- 3 API keys
- 1 seat
- 7-day audit history
- Full REST API, every endpoint
- Atomic, race-free one-time redemption
- Revoke before read, expiry on every token
- 256-bit codes, hashed at rest
- Retrieval page on x-tkn.com
For the first secret you send outside the company.
- 100,000 operations / month
- 256 KB payload
- 30-day maximum expiry
- 5 API keys
- 5 seats
- 90-day audit history
- Everything in Developer
- Recipient auth before reveal — passphrase or emailed code
- Retrieval webhooks: read at T, from IP X
- IP allowlist per API key
For procurement, and for auditors.
- Unlimited operations
- 256 KB payload
- Custom expiry window
- Unlimited API keys
- Unlimited seats
- 365-day audit history
- Everything in Team
- Negotiated payload, expiry and retention
Already have an account? Log in
Upgrades, downgrades, cancellation and card changes all happen in the billing portal. Stripe prorates a plan change for the rest of the current period.
See where the others win
Onetime Secret and Vaulted do parts of this for free. Our comparison pages say where they are the better choice.