The primary surface is the REST API and the MCP server.
There is no dashboard as the main path. Send, query, seal and verify over HTTP or from an agent that speaks MCP. The UI comes later.
POST /v1/messages · MCP · mailack-verify
POST /v1/messages with Idempotency-Key.
Fixes Message-ID and Date, hashes the exact byte stream that will go over the wire, and will not re-send if you replay the same key. Body accepts from, to, subject and html.
curl -X POST https://api.mailack.com/v1/messages \
-H "Authorization: Bearer $MAILACK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"from": "noreply@acme.mx",
"to": "cliente@ejemplo.com",
"subject": "Estado de cuenta",
"html": "<p>Tu estado de cuenta está listo.</p>"
}'Status, proof bundle and on-demand sealing.
Read the message, download the proof package (hash, Merkle path, certificate) or request an individual seal when you need one.
curl -s https://api.mailack.com/v1/messages/$MESSAGE_ID \
-H "Authorization: Bearer $MAILACK_API_KEY"curl -s https://api.mailack.com/v1/messages/$MESSAGE_ID/proof-bundle \
-H "Authorization: Bearer $MAILACK_API_KEY" \
-o bundle.jsoncurl -X POST https://api.mailack.com/v1/messages/$MESSAGE_ID/seal \
-H "Authorization: Bearer $MAILACK_API_KEY"Check the bundle with no network.
mailack-verify reads the proof bundle and, optionally, the original .eml. It does not call our servers.
./bin/mailack-verify bundle.json -eml mensaje.emlCanonical hash
Merkle inclusion proof
Root against the certificate
Agents that send, query, verify and operate.
mailack-mcp exposes MCP tools over the same API: send messages, read status, fetch proof bundles, verify and run allowed operations (suppression, event lookup).
Add the server to the MCP client you use (Claude Desktop, Cursor or any stdio-capable host). Auth is the API key in the process environment.
{
"mcpServers": {
"mailack": {
"command": "./bin/mailack-mcp",
"env": {
"MAILACK_API_KEY": "mlk_...",
"MAILACK_API_URL": "https://api.mailack.com"
}
}
}
}Seven processes, one evidence contract.
Each service has a narrow role. Delivery does not depend on the LLM; sealing never re-serializes the MIME.
RLS, suppression and VERP correlation.
PostgreSQL with Row Level Security. Each tenant only sees its rows. Working tables are messages, batches, events, suppressions and access_log.