FAQ

Frequently asked questions about sending transactional emails.

General Questions

What's the difference between a server and a stream?

A server is a logical container that groups your email sending configuration. Think of it as a project or application. Each server has its own API keys, sender identities, and suppressions.

A stream is a channel within a server that separates different types of emails. You typically have a "Transactional" stream for triggered emails (password resets, order confirmations) and a "Broadcast" stream for marketing emails (newsletters, promotions).

Separating streams protects your transactional email reputation from marketing complaints.

Can I use my own SMTP server?

Transactional provides its own optimized email infrastructure. We don't support using external SMTP servers because:

  • Our infrastructure is optimized for high deliverability
  • We handle authentication, reputation, and compliance
  • Direct API is faster and more reliable than SMTP

If you're migrating from an SMTP provider, our API is straightforward to integrate.

What are the rate limits?

PlanEmails/SecondEmails/Month
Free11,000
Pro100Unlimited
EnterpriseCustomUnlimited

Higher limits are available on Enterprise plans.

Authentication & Setup

How do I authenticate my domain?

Domain authentication requires adding DNS records:

  1. SPF - Authorizes our servers to send for your domain
  2. DKIM - Adds digital signatures to your emails
  3. DMARC - Sets policy for failed authentication

Add these records through your DNS provider, then verify in the dashboard. See Sender Identities for detailed instructions.

How long does domain verification take?

DNS propagation typically takes 15 minutes to 48 hours. If verification fails after 48 hours, double-check your DNS records for typos.

Can I send from a free email address (gmail.com)?

No. You must verify a domain you own. Free email providers don't allow third-party sending and emails would be rejected or marked as spam.

Sending

How do I send my first email?

  1. Create an email server in the dashboard
  2. Add and verify a sender domain
  3. Generate an API key
  4. Send using our API or SDK

See Quick Start for a complete walkthrough.

Can I send attachments?

Yes. Attach files up to 10MB per email (25MB total per email):

await client.emails.send({
  from: 'hello@yourapp.com',
  to: 'user@example.com',
  subject: 'Your invoice',
  html: '<p>Please find your invoice attached.</p>',
  attachments: [
    {
      filename: 'invoice.pdf',
      content: base64EncodedContent,
      contentType: 'application/pdf',
    },
  ],
});

Can I schedule emails for later?

Yes. Use the scheduledAt parameter:

await client.emails.send({
  from: 'hello@yourapp.com',
  to: 'user@example.com',
  subject: 'Reminder',
  html: '<p>Your trial ends tomorrow!</p>',
  scheduledAt: new Date('2024-01-20T09:00:00Z'),
});

Tracking

How do I track email opens?

Enable open tracking in your stream settings or per-email:

await client.emails.send({
  // ...
  tracking: { opens: true },
});

We insert a tiny invisible image that records when loaded.

Note: Open tracking isn't 100% accurate because some email clients block images.

Enable click tracking in your stream settings or per-email:

await client.emails.send({
  // ...
  tracking: { clicks: true },
});

We rewrite links to pass through our tracking server before redirecting.

How do I set up a custom tracking domain?

  1. Go to Email > Servers > [Server] > Settings > Tracking
  2. Enter your tracking subdomain (e.g., track.yourdomain.com)
  3. Add CNAME record pointing to track.usetransactional.com
  4. Click Verify

See Tracking for details.

Deliverability

What is a suppression list?

A suppression list contains addresses that shouldn't receive emails:

  • Hard bounces - Invalid addresses
  • Spam complaints - Recipients who reported spam
  • Unsubscribes - Recipients who opted out

We automatically block sends to suppressed addresses.

What happens if an email fails?

Transactional automatically retries soft bounces (temporary failures) with exponential backoff:

  • Attempt 1: Immediate
  • Attempt 2: 5 minutes
  • Attempt 3: 30 minutes
  • Attempt 4: 2 hours
  • Attempt 5: 8 hours

After 5 failures, the email is marked as bounced.

Hard bounces (permanent failures) are not retried.

How do I handle bounces?

  1. Automatic suppression - We add hard bounces to your suppression list
  2. Webhooks - Receive real-time notifications of bounces
  3. Update your database - Mark bounced addresses as invalid

See Handling Bounces for implementation details.

How do I manage unsubscribes?

Include an unsubscribe link in your emails:

<a href="{{unsubscribe_url}}">Unsubscribe</a>

We automatically add the unsubscribe URL. When clicked:

  1. Recipient is added to suppression list
  2. Webhook notification is sent
  3. Future sends are blocked

Why are my emails going to spam?

Common causes:

  1. Missing authentication - Set up SPF, DKIM, DMARC
  2. Poor sender reputation - Clean your list, reduce complaints
  3. Spam-like content - Avoid trigger words, excessive images
  4. Blacklisted - Check if your domain/IP is listed
  5. Low engagement - Recipients aren't opening emails

See Best Practices for solutions.

Billing & Limits

How much does it cost?

PlanPriceEmails
Free$0/month1,000/month
ProUsage-basedUnlimited ($0.001/email)
EnterpriseCustomVolume discounts

What counts as an email?

Each recipient counts as one email. If you send to 100 recipients, that's 100 emails.

Retries are not counted again.

Do suppressed emails count?

No. Emails blocked by the suppression list are not counted toward your usage.

API & SDKs

Which languages have SDKs?

We provide official SDKs for:

  • JavaScript/TypeScript
  • Python
  • Ruby
  • Go
  • PHP

See API Reference for documentation.

Can I use the API directly?

Yes. All SDK functionality is available via REST API:

curl -X POST https://api.usetransactional.com/v1/emails/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@yourapp.com",
    "to": "user@example.com",
    "subject": "Hello",
    "html": "<p>Hello World</p>"
  }'

Support

How do I get help?

  • Documentation - You're here!
  • Dashboard - Contact support via the help widget
  • Email - support@usetransactional.com
  • Enterprise - Dedicated support channel

What's the uptime SLA?

PlanUptime SLA
FreeNone
Pro99.9%
Enterprise99.99% + custom

Still Have Questions?

Contact our support team at support@usetransactional.com or use the help widget in your dashboard.