Forms and email for websites without a backend

    Put a form on your site. No backend. No database.

    Design a form, publish it as a hosted page or embed, and read submissions in an inbox with spam scoring and replies. Send transactional email from the same project through any SMTP provider, with a public trace ID per message. Built so your AI agent can wire it up in one HTTP call.

    bash · from zero to a live form
    # 1 · anonymous bearer + sandbox project, no account
    curl -X POST https://api.mailnix.ch/oauth/token \
      -d grant_type=client_credentials
    → { "access_token": "mnx_live_a8f3…", "project": "prj_7c2d" }
    
    # 2 · your AI agent takes it from there (MCP tools)
    form_create  "Contact"        → form ready to publish
    form_publish                  → hosted page + embed
    form_submission_wait          → blocks until someone submits

    Verified with the MCP clients your users already run

    Claude DesktopChatGPTCursorVS CodeZedContinueWindsurfMCP Inspector

    Two products, one project

    Forms in. Email out. Traced end to end.

    01

    mailnix Forms

    A visual designer with validation, conditional logic, themes, a 12-column layout grid, and multi-step pages. Publish as a hosted page on forms.mailnix.ch or embed it in your site. Submissions land in an inbox with spam scoring, statuses, and CSV export.

    02

    Email service

    Send from your app through AWS SES, Postmark, Resend, SendGrid, Mailgun, or your webhoster's SMTP. Swap the destination underneath and your app code stays exactly the same. Every message returns a public trace ID.

    03

    One-call bootstrap

    POST /oauth/token with client_credentials returns a working bearer in one HTTP roundtrip. No signup, no API key paste, no credit card. Call account_claim with an email to keep the same token and go live.

    mailnix Forms

    The form is the easy part. We built the rest.

    Contact, booking, signup, application: design it once, publish it everywhere. Owner notifications go to addresses you verify. Replies to a submitter are always a deliberate, per-submission action by you, from the dashboard or through your AI assistant, and every send lands in an audit trail.

    Hosted page + iframe embed on every tier; script embed on paid plans
    Spam scoring, submission statuses, CSV export, per-form retention
    File uploads with virus scanning on paid plans
    No autoresponder, ever: mailnix never auto-emails the person who filled in your form
    Explore mailnix Forms
    SUBMISSIONS · Contact formLive

    jordan@acme.com

    "Can you quote 500 units?" · new · spam score 0.2

    sam@studio.example

    "Booking for Friday 14:00" · replied · spam score 0.1

    win-a-prize@spam.example

    caught by spam scoring · never billed

    // reply is a per-submission action, always yours
    form_reply_draft_create submission_id=sub_91ce
    → draft shown to you for review before send

    Built for the way you actually send

    From your agent, your server, or your browser.

    > form_create   name: "Contact"
    ✓ frm_4b2a · draft · 4 fields
    > form_publish  form_id: frm_4b2a
    ✓ live · hosted page + embed ready
    > form_submission_wait
    … blocks until a submission arrives

    From your AI agent

    mailnix exposes a Model Context Protocol server (spec 2025-11-25, full conformance) with 104 verb-noun tools. form_create, email_send_test, email_trace_lookup, and form_submission_wait let an assistant build forms, wire providers, and read traces on your behalf.

    curl -X POST \
      https://api.mailnix.ch/v1/messages \
      -H "Authorization: Bearer mnx_live_…" \
      -d to=jordan@acme.com \
      -d subject="Your receipt"
    → { "trace_id": "a8f3c2d1-…" }

    From your server

    Call POST /v1/messages from any language, a drop-in for the SendGrid / Postmark / SES REST shape, idempotency keys included. Get back a trace_id immediately.

    fetch("https://api.mailnix.ch/v1/messages", {
      method: "POST",
      headers: { Authorization:
        "Bearer mnxpub_…" },  // safe in JS
      body: form
    })
    // origin lock · rate caps · CAPTCHA

    From your browser

    Publishable mnxpub_ keys let a page send straight from the user's browser. Origin lock, locked From, sliding-window rate caps, and optional Turnstile / hCaptcha built in.

    End-to-end traces

    If it left your app, you can find it.

    Every mailnix send produces a trace. Open it and you see the routing decision, which provider answered, the SMTP response code, and every webhook event afterwards. Share the trace URL with a teammate, a customer, or your AI assistant.

    Routing decision
    Provider attempt & response code
    Delivered / bounced / complained events
    TRACEDelivered

    a8f3c2d1-9b4e-4f7a-8c2d-1e5f6a3b9c8d

    to jordan@acme.com · via SES (us-east-1)

    receivedroutedattemptedrespondedconfirmed
    // event 5/5 · delivery.confirmed
    {
      "event": "delivery.confirmed",
      "provider": "ses",
      "latency_ms": 842,
      "timestamp": "2026-05-27T18:03:42Z"
    }

    One HTTP call to start.

    Forms, REST, or MCP. No signup required.

    One trace per message.

    Public-shareable UUID, end to end.

    One suppression list.

    Across every provider. No copies to sync.

    Pricing that fits the project

    Start at zero. Pay for what you use.

    See full pricing

    Free

    A free monthly quota, then pay per use.

    CHF 0 + usage

    Basic

    Solo apps, small SaaS.

    CHF 10/mo

    Most popular

    Pro

    For products that ship.

    CHF 49/mo

    Enterprise

    Configurable limits, DPA.

    Custom

    Hosted in Germany

    Your data stays under EU law.

    mailnix is built by LIMERION GmbH in Liechtenstein and runs in German data centres (Hetzner, Nuremberg). Your data stays under EU data protection law (GDPR). One API call deletes every user-attributed row; custom retention windows and a Data Processing Agreement are available on request.

    Read the security overview
    German data centres
    GDPR-compliant
    DPA on request
    DSAR right-to-erasure

    One HTTP call to get started

    Put a form on your site tonight. Wire your provider when you're ready.