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.
Every endpoint, its parameters and a real response.
Make real calls from your browser with a test key.
Get bounces, opens and clicks pushed to your app.
Let your coding agent set Mailpark up for you.
Send your first email
Five minutes, no domain needed. Test keys never send real email, so you can try everything safely.
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..envMAILPARK_API_KEY=sk_test_… MAILPARK_API_URL=https://api.mailpark.ioAdd the ready-made templates
Eight templates in your brand:
welcome,verify-email,password-reset,magic-link,receipt,payment-failed,team-inviteandproduct-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"}}'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" } }'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.
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.
Base URL
https://api.mailpark.ioAll endpoints live under /v1. JSON in and out, snake_case fields, ISO-8601 times in UTC, money in integer cents. See requests and responses.