Quickstart
Start with a verified sending domain, then connect through SMTP or the Email API.
1. Before you begin
Have an account with a verified email, a domain whose DNS you manage, and your current package details. Adding a domain requires an active package. Quotas and domain limits come from your actual account configuration. This guide does not perform login, purchases or real sends.
2. Add and verify a domain
Add an ASCII domain in the console. Read dns_records and publish the returned DKIM and SPF TXT values. Once DNS propagates, request verification and inspect all_passed and each check; HTTP 200 alone is not verification. Only verified sending domains can be used.
curl -X POST "${SMTPDOG_API_ORIGIN}/domains" \
-H "Authorization: Bearer ${SMTPDOG_SESSION_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"domain_name":"example.com"}'3. Create a sending credential
Save the full key securely as soon as you create an API Key; subsequent lists expose metadata only. Prefer a domain scope. Sending uses an API Key, while domain and key management use a session token. Never interchange them or put a key in a browser or public repository.
4. Choose an integration
The Email API uses standard HTTP requests and returns a message_id. SMTP works with standard TLS-capable clients and accepts one recipient per message. Example environment variables are documentation placeholders, not backend configuration keys; set them to your verified connection details.
curl -X POST "${SMTPDOG_API_ORIGIN}/v1/mail/send" \
-H "Authorization: Bearer ${SMTPDOG_API_KEY}" \
-H "Content-Type: application/json" \
--data '{
"from": "sender@example.com",
"to": "recipient@example.com",
"subject": "Welcome to your product",
"text": "Your message goes here."
}'5. Understand acceptance
HTTP 202 and queued mean accepted into the queue only. Query later status by message_id or receive Webhooks. sent does not guarantee inbox placement or reading. Do not blindly repeat a timed-out send: there is no client send idempotency protocol.