Skip to content
Docs

Mailack documentation.

Quickstart, product API and SDKs. Certified email with NOM-151 evidence, exposed as HTTP API and MCP.

API key → send → status → proof-bundle → verify → MCP

  1. 01environment variables

    Authenticate with an API key

    Export the portal key (mlk_ prefix). Every machine /v1/* route requires Authorization: Bearer. The tenant is resolved on the server from the key.

    environment variables
    export MAILACK_API_KEY="mlk_..."
    export MAILACK_API_URL="https://api.mailack.com"
    
    # Cada petición lleva la clave en Authorization.
    curl -s "$MAILACK_API_URL/v1/messages" \
      -H "Authorization: Bearer $MAILACK_API_KEY" \
      -H "Accept: application/json"
  2. 02POST /v1/messages

    Send the first message

    POST /v1/messages with Idempotency-Key. Keep the id from the response for later steps. Retrying with the same key is safe (replay).

    POST /v1/messages
    MESSAGE_ID=$(curl -s -X POST "$MAILACK_API_URL/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": "Primer mensaje",
        "html": "<p>Hola desde mailack.</p>"
      }' | jq -r .id)
    
    echo "$MESSAGE_ID"
  3. 03GET /v1/messages/{id}

    Check its status

    GET /v1/messages/{id} returns delivery status, events and message metadata.

    GET /v1/messages/{id}
    curl -s "$MAILACK_API_URL/v1/messages/$MESSAGE_ID" \
      -H "Authorization: Bearer $MAILACK_API_KEY" | jq .
  4. 04GET /v1/messages/{id}/proof-bundle

    Download the proof bundle

    GET /v1/messages/{id}/proof-bundle. Includes the canonical hash, Merkle inclusion proof and, when present, the PSC Codex certificate.

    GET /v1/messages/{id}/proof-bundle
    curl -s "$MAILACK_API_URL/v1/messages/$MESSAGE_ID/proof-bundle" \
      -H "Authorization: Bearer $MAILACK_API_KEY" \
      -o bundle.json
    
    # Campos de la constancia del PSC Codex en el bundle:
    # certificate_id, serial_number, policy_oid, algorithm_oid, sealed_at
    jq '{certificate_id, serial_number, sealed_at}' bundle.json
  5. 05POST /v1/verify

    Verify it

    POST /v1/verify recomputes the Merkle inclusion proof and answers valid: true|false. And without an account, anyone can check the bundle at mailack.com/verificar: the check runs in their browser and the file never leaves their device.

    POST /v1/verify
    curl -s -X POST "$MAILACK_API_URL/v1/verify" \
      -H "Authorization: Bearer $MAILACK_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{\"message_id\": \"$MESSAGE_ID\"}" | jq .
    # → {"valid": true, "merkle_root": "…", "certificate_id": "…", "sealed_at": "…"}
    
    # Sin cuenta: bundle.json en mailack.com/verificar (todo en el navegador)
  6. 06mcpServers.mailack

    Connect the MCP server

    Register mailack-mcp in your MCP client. The agent can send, query, verify and manage domains/webhooks through the exposed tools.

    mcpServers.mailack
    {
      "mcpServers": {
        "Mailack": {
          "command": "./bin/mailack-mcp",
          "env": {
            "MAILACK_API_KEY": "mlk_...",
            "MAILACK_API_URL": "https://api.mailack.com"
          }
        }
      }
    }

OpenAPI reference

The formal contract lives in the Mailack repository (docs/openapi.yaml). These pages are the product guide and the shortest path to a first verified proof bundle.