Viesti Sign in

Viesti vs Resend

Resend offers an email API and SMTP relay with templates, React Email, webhooks, inbound email and Broadcasts for marketing. Its free plan allows 3,000 emails a month (100 a day), and Pro is $20 a month for 50,000. Viesti's JSON API uses the same field names for a basic send, costs $5 a month for 50,000 emails, and leaves out templates, webhooks, tracking, inbound email and marketing.

Resend and Viesti compared

Resend details come from its pricing page and documentation, linked in each row. Checked 26 September 2026. Prices in US dollars.

Viesti Resend
Entry paid plan $5/month for 50,000 emails per billing cycle Pro: $20/month for 50,000 emails, no daily limit
Free plan 75 emails per UTC day and 2,000 per UTC month, with no time limit 3,000 emails/month, at most 100 a day
Extra emails $0.10 per 1,000 ($0.0001 per email); paid sending has no volume cap $0.90 per 1,000 on Pro
Sending domains Up to 20 per workspace on every plan 3 on Free, 10 on Pro, 1,000 on Scale
SMTP smtp.viesti.email, port 587 (STARTTLS) or 465 (implicit TLS); AUTH PLAIN with username apikey and your API key as the password smtp.resend.com, ports 465 or 2465 (implicit TLS) or 25, 587, 2587 (STARTTLS); username resend, password the API key
HTTP API POST /v1/send with JSON from, to, subject, text and html, or a whole MIME message in raw; no SDKs, no batch endpoint POST /emails with from, to, subject, html and text, plus cc, bcc, reply_to, headers, attachments, tags, scheduled_at, templates and idempotency keys; batch sends of up to 100
Marketing mail Not accepted Broadcasts on separate marketing plans: free up to 1,000 contacts, then from $40/month
IP pools Separate shared pools for free and for paid workspaces; marketing mail is not accepted on any plan Shared IPs by default; managed dedicated pools on request
Dedicated IPs Dedicated plan: an IP pool of your own with hands-on warmup, custom pricing, up to 120,000 emails an hour and 2,000,000 a day; ask [email protected] $30/month add-on on Scale, for senders above 3,000 emails a day
Domain authentication Ownership TXT, DKIM key delegated by CNAME (replaced without DNS changes), include:spf.viesti.email in SPF and a DMARC policy; optional Return-Path CNAME for SPF alignment DKIM TXT at resend._domainkey; MX and SPF TXT on the Return-Path subdomain, send by default; DMARC recommended
Open and click tracking None Off by default; enabled per domain
Webhooks None; each recipient's outcome is in the dashboard's Activity log On every plan; 5 endpoints on Pro, 10 on Scale
Templates None; send rendered HTML and text Stored templates; React Email
Inbound email None On every plan
Message history Activity log; message bodies kept 30 days, delivery events 180 days 30 days on Free; other plans: see pricing

Choose Resend if

  • You build email with React Email or want stored templates.
  • You need webhooks, inbound email, scheduled sends, batch sends or idempotency keys.
  • You also send newsletters or product updates from the same account.
  • You need more free volume: 3,000 emails a month and 100 a day, against Viesti's 2,000 and 75.
  • You need to choose a sending region, or SOC 2 Type II, which Resend's pricing page lists on every plan.

Choose Viesti if

  • Price per email matters: $5 for 50,000 emails, then $0.10 per 1,000, against $20 for 50,000, then $0.90 per 1,000, on Resend Pro.
  • You want your provider to refuse marketing mail, so its shared pools carry transactional mail only.
  • You send from several domains on the free plan: up to 20 on Viesti, against 3 on Resend Free.
  • Your sends use only from, to, subject, html and text, which carry over by name.

Migrate from Resend to Viesti

1. Create a workspace and an API key

Sign in with GitHub or Google; the first sign-in creates your workspace. Create an API key on the Credentials page and keep it in your secret store, for example as VIESTI_API_KEY. The quickstart walks through the whole setup.

2. Verify your sending domain

Add the domain on the Sending domains page and publish the records it lists (details in DNS records):

  • TXT _viesti.yourdomain.com, which proves ownership.
  • CNAME v1._domainkey.yourdomain.com, which delegates DKIM signing to dkim.viesti.email.
  • include:spf.viesti.email in the domain's SPF record. The page shows a merged value that keeps the includes you already publish; a domain must have only one SPF record.
  • A DMARC record at _dmarc.yourdomain.com, only if no DMARC policy covers the domain yet.
  • Optional: CNAME viesti.yourdomain.com to bounce.viesti.email, so bounces return to your own domain and SPF aligns with DMARC.

Viesti's Return-Path record is viesti.yourdomain.com, not send, and its DKIM selector is v1, so Resend's records stay in place and both services can send while you switch.

3. Switch your SMTP settings

Host:     smtp.viesti.email
Port:     587 (STARTTLS) or 465 (implicit TLS)
Username: apikey
Password: your Viesti API key

Viesti accepts AUTH PLAIN only, and only after TLS; mail libraries pick it automatically. To try the settings before you deploy, send a test message with curl:

printf 'From: [email protected]\r\nTo: [email protected]\r\nSubject: Viesti test\r\n\r\nSent through Viesti.\r\n' |
  curl -sS --ssl-reqd smtp://smtp.viesti.email:587 \
    --user "apikey:$VIESTI_API_KEY" \
    --mail-from [email protected] --mail-rcpt [email protected] \
    --upload-file -

The command prints nothing when Viesti accepts the message, which then shows in the Activity log; a rejected login or recipient prints curl's error. SMTP covers ports, limits and error replies.

Change the username from resend to apikey along with the host and password, and use port 587 or 465 if you used 25, 2465 or 2587. Remove the Resend-Idempotency-Key header if you set it: Viesti does not read it and delivers it to recipients unchanged.

4. Or switch your API calls

Keep the Bearer header and point requests at Viesti. A basic Resend payload needs two changes: to must be an array, and fields Viesti does not know, such as cc, reply_to, attachments or scheduled_at, must go.

curl https://viesti.email/v1/send \
  -H "Authorization: Bearer $VIESTI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from": "Acme <[email protected]>", "to": ["[email protected]"], "subject": "Your receipt", "html": "<p>Thanks for your order.</p>", "text": "Thanks for your order."}'

A 202 response carries the message id. Viesti has no idempotency keys: if a request times out and you retry it, the recipient can get two copies.

Viesti's endpoint is POST https://viesti.email/v1/send with Authorization: Bearer $VIESTI_API_KEY and a JSON body of from, to (an array of up to 50 addresses), subject, text and html. It rejects any other field with 400 invalid JSON. For Cc, Bcc, Reply-To, custom headers or attachments, build the MIME message yourself, send it in raw, and list every recipient, Cc and Bcc included, in to. See the HTTP API reference.

5. Replace what Viesti does not do

  • Templates: render the message in your app and send the finished HTML and text.
  • Webhooks: there are none. The Activity log shows each recipient's outcome, and hard bounces and complaints add the recipient to your suppression list automatically; see bounces and suppressions.
  • Open and click tracking: Viesti does not rewrite links or add pixels, so there is nothing to configure or remove.
  • React Email: render your components to HTML in your app and send the result as html.
  • Inbound email and Broadcasts: keep them on Resend or move them to another service; Viesti handles neither.

6. Carry over suppressions

Export the addresses your current provider suppresses (hard bounces, complaints, unsubscribes) and add each one on Viesti's Suppressions page with a reason. The page adds one address at a time. Viesti then refuses mail to those addresses when you submit it.

7. Remove Resend's records

Once nothing sends through Resend, wait a few days for late bounces, then delete the resend._domainkey TXT record, the MX and TXT records on the Return-Path subdomain (send by default) and the tracking CNAME if you enabled tracking. Keep any MX records Resend uses to receive mail for the domain if you still receive through it, and keep your DMARC record; Viesti checks it.