// how to fix
Resend "domain is not verified": fix DNS records and 403 errors
Resend refuses to send until your domain is verified. Fix the DKIM, SPF and MX records on the send subdomain, pending or failed status and 403 errors.
What it means
Resend only sends from domains you own and have verified with DNS records. If you send from a domain that is not verified, or not verified exactly as written in your From address, the API answers with a 403 error. The message usually says that the domain is not verified and asks you to add and verify it on the Resend Domains page.
A related 403 appears when you send from the test domain resend.dev to anyone other than your own account address: the test domain only delivers to you.
On the Domains page, each domain has a status. The main ones are:
- not_started: the domain was added but you have not clicked "Verify DNS Records".
- pending: Resend is still looking for the records.
- verified: you can send.
- failed: Resend could not find the records within 72 hours.
- temporary_failure: the domain was verified, but a record has disappeared. Resend rechecks for 72 hours, then marks it failed.
Why it happens
- Records not added, or added at the wrong name. Resend's records live on names such as
resend._domainkeyand a sending subdomain (by defaultsend). If your DNS panel appends your domain, entering the full name doubles it; see DNS record added at the wrong name. - From domain mismatch. You verified
updates.yourdomain.combut send fromyourdomain.com, or the reverse. Each domain and subdomain is verified separately. - The DKIM value was cut or changed when pasting (missing characters, extra quotes, line breaks).
- Records deleted later, for example during a DNS migration, which leads to temporary_failure. See email records lost after moving your DNS host.
- Not visible yet. The records were added recently.
How to check
- In Resend, open the domain and its Records tab. Note each record's type, name and value; this is the only source of truth, because the record set can differ between domains (newer domains may get CNAME records instead of TXT and MX for SPF).
- Check what the internet sees. For a typical setup:
dig +short TXT resend._domainkey.yourdomain.com dig +short MX send.yourdomain.com dig +short TXT send.yourdomain.com
Compare each answer with the Records tab. - Run the Delivmail domain scanner on your domain to see the published SPF, DKIM and DMARC records.
- Compare the From domain in your code, character by character, with the verified domain name.
How to fix it
- Add every record from the Records tab. A typical set looks like this (your values will differ, copy them from Resend):
resend._domainkey.yourdomain.com TXT "p=MIGfMA0GCSqGSIb3DQEB..." send.yourdomain.com MX 10 feedback-smtp.<region>.amazonses.com send.yourdomain.com TXT "v=spf1 include:amazonses.com ~all"
- Put the MX on the send subdomain, never on the root. Adding it to
yourdomain.comwould send your incoming mail to Resend's bounce handler. Your existing MX records for your mailbox stay unchanged. - Do not merge this SPF into your root SPF. It belongs to the
sendsubdomain, which is the Return-Path domain Resend uses. Your root SPF record is not touched. - On Cloudflare, keep any CNAME records as "DNS only".
- Click Verify DNS Records in Resend. If the status is failed, fix the records and start verification again.
- Match the From address to the verified domain, or verify the domain you actually use. Using a subdomain for a type of mail is a good practice; see email authentication for subdomains.
- Add DMARC if your domain has none, starting with
p=none; see no DMARC record on your domain.
Check that it is fixed
Wait until dig returns the expected values (from minutes to a few hours, depending on your DNS host and TTL) and the domain shows verified. Then send an email through Resend to the unique address on the Delivmail home page. The report should show DKIM passing for your domain, SPF passing on the send subdomain, and DMARC passing. Then send again to the original recipient. Keep the records in place: removing one later puts the domain in temporary_failure.
Check that it is fixed
DNS changes can take from a few minutes to a few hours. Then send a new test email or scan your domain again.
Related guides
- No SPF record on your domainYour domain does not say which servers may send email for it. Add one TXT record and receivers can tell your real emails from fakes.
- SPF error: too many DNS lookups (permerror)SPF allows at most 10 DNS lookups. Above that, the whole record breaks and receivers treat it as invalid. Here is how to slim it down.
- Several SPF records on one domainA domain must have only one SPF record. With two or more, SPF breaks for every email. Merge them into a single line.
- SPF fails: the sending server is not authorizedYour domain has an SPF record, but the server that sent your email is not in it. Find which service sent the email and add it.
- No DKIM signature on your emailsDKIM adds a digital signature that proves an email really comes from your domain. Turn it on in your email provider and publish its key in DNS.