Mailpark
Mailpark API

One API for every email your product sends

Send password resets and receipts the moment they're needed, and run onboarding sequences and product updates from the same account. JSON over HTTPS, with plain-language errors that say how to fix them.

Send your first email

Five minutes, no domain needed. Test keys never send real email, so you can try everything safely.

  1. Get a test key

    Create an account, then copy a test key from Settings → API keys. Test keys start with sk_test_. Keep it in an environment variable, never in source code.

    .env
    MAILPARK_API_KEY=sk_test_…
    MAILPARK_API_URL=https://api.mailpark.io
  2. Add the ready-made templates

    Eight templates in your brand: welcome, verify-email, password-reset, magic-link, receipt, payment-failed, team-invite and product-update.

    curl -X POST https://api.mailpark.io/v1/templates/essentials \
      -H "Authorization: Bearer $MAILPARK_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"brand":{"product_name":"Acme","primary_color":"#4f46e5"}}'
  3. Send an email

    curl -X POST https://api.mailpark.io/v1/emails \
      -H "Authorization: Bearer $MAILPARK_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: reset-user_123-abc" \
      -d '{
        "to": "jane@example.com",
        "template": "password-reset",
        "data": { "reset_url": "https://acme.dev/reset/abc" }
      }'
  4. See it in the test inbox

    With a test key, the email is rendered exactly as it would be sent and kept in the test inbox. Read it with GET /v1/test-inbox or in the web app.

  5. Go live

    Add your domain and its DNS records. Once it's verified, a person on your team clicks Go live in the web app. Then swap in a live key (sk_live_…). Nothing else in your code changes.

Try it without writing code
The playground sends real requests with your test key and shows the same request as cURL, TypeScript and fetch.

Base URL

Base URL
https://api.mailpark.io

All endpoints live under /v1. JSON in and out, snake_case fields, ISO-8601 times in UTC, money in integer cents. See requests and responses.

What you can do