Send email and keep the proof
An email platform for your own domains, with a chain of custody for every message you send or receive.
- Sends
- each email once
- Signs
- every webhook
- Receives
- mail as JSON, with its verdicts
- Keeps content
- 30 days, never in a log
Minket is not open for sign-up yet.
Written
18:00:00UTC
One call, from the SDK or curl. Sending
const minket = new Minket({
apiKey: process.env.MINKET_API_KEY,
});
const email = await minket.emails.send({
from: "receipts@mail.fernbank.example",
to: "rui.okafor@example.com",
subject: "Your receipt for order 10452",
html: "<p>Thanks, Rui.</p>",
}, { idempotencyKey: "receipt-10452" });curl https://api.minket.com/v1/emails \
-H "Authorization: Bearer $MINKET_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: receipt-10452" \
-d '{
"from": "receipts@mail.fernbank.example",
"to": "rui.okafor@example.com",
"subject": "Your receipt for order 10452",
"text": "Thanks, Rui."
}'{
"id": "019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5c",
"object": "email",
"status": "queued",
"scheduled_at": null,
"idempotent_replay": false
}Accepted
18:00:00+0 s
An id to look up, and the same answer for a retried key. Retries
Emails
Your receipt for order 10452
019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5c
- From
- receipts@mail.fernbank.example
- To
- rui.okafor@example.com
- Idempotency-Key
receipt-10452, for 24 hours
Chain of custody
- AcceptedMinket API
- Sentnext
Checked
before any live send
Live mail goes out only from a domain whose records check out. Domains
| Record | Name | Value | Status |
|---|---|---|---|
DKIM CNAME | 7f3a9c._domainkey.mail.fernbank.example | 7f3a9c.dkim.amazonses.com | Verified |
DKIM CNAME | b21e04._domainkey.mail.fernbank.example | b21e04.dkim.amazonses.com | Verified |
DKIM CNAME | c9d811._domainkey.mail.fernbank.example | c9d811.dkim.amazonses.com | Verified |
MAIL FROM MX | bounce.mail.fernbank.example | 10 feedback-smtp.<region>.amazonses.com | Verified |
SPF TXT | bounce.mail.fernbank.example | v=spf1 include:amazonses.com ~all | Verified |
DMARC TXT | _dmarc.mail.fernbank.example | v=DMARC1; p=none; rua=mailto:dmarc@fernbank.example | Verified |
Tracking CNAME | links.mail.fernbank.example | links.minket.com | Verified |
Receiving MX | mail.fernbank.example | 10 inbound-smtp.<region>.amazonaws.com | Verified |
Sent
18:00:02+2 s
Every message carries its id, so a reply finds the email it answers.
X-Minket-Email-Id: 019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5c
Delivered
18:00:04+4 s
Pick a test recipient and the chain plays its outcome. Test mode
- DeliveredThe receiving server took it.+4 s
Signed
18:00:04+4 s
- Endpoint
fernbank.example/api/minket- Secret
whsec_<shown once>- Tolerance
- 5 minutes
Each event reaches your endpoint signed, as it happens. Webhooks
POST /api/minket HTTP/1.1
svix-id: msg_019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a60
svix-timestamp: 1761328804
svix-signature: v1,K1lQb2w3YnE1Y0F0ZE5hV1J2VHdxaXZlSHk0dz0=
{
"type": "email.delivered",
"created_at": "2026-10-24T18:00:04.000Z",
"data": {
"email_id": "019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5c",
"to": ["rui.okafor@example.com"],
"subject": "Your receipt for order 10452"
}
}Answered
09:14:37+2 d
The reply arrives as email.received, tied to the email it answers. Inbound
- From
rui.okafor@example.com- Subject
- Re: Your receipt for order 10452
- Answers
- the receipt, by its id
Sealed
23 Nov+30 d
The content is deleted; what happened to the email stays. Security
Its addresses and events stay.
Purged
23 Nov 2027+13 months
Then the addresses and the events go too.
The rest of Minket
Mailboxes
Send from a person's own account, with their name on it.
Audience
Contacts, topics and their consent; broadcasts and automations.
Developers
SDKs for TypeScript, Python and Go, a command line and an MCP server.
Built on
Amazon SES, in two regions.
Questions
Can I sign up today?
Not yet. The quickstart shows a first request, errors and test mode.
Can I send over SMTP?
Yes, with SMTP credentials made in the console. SMTP mail skips the suppression check, the automatic pause and the content checks.
Do I need an SDK?
No. The API is HTTPS and JSON, so curl is enough.