> ## Documentation Index
> Fetch the complete documentation index at: https://docs.readdy.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrate with Resend

> Send form notification emails using your own custom domain and brand identity with Resend integration

## Quick Start

1. Make sure you have a **Readdy Pro** subscription
2. Log in to [Resend](https://resend.com/api-keys) and create an API Key with **Full Access** permission
3. Open the Resend configuration from the Readdy integration panel
4. Paste API Key → Select a verified domain → Configure email settings → Send test → Done

Read on for detailed instructions.

***

## Overview

Resend is a professional email delivery service. By integrating Resend with Readdy, you can send form notification emails using your own custom domain and brand identity, improving your professional image and email deliverability.

### Key Features

* Send notification emails from your own domain
* Customize sender name, email address, and email subject
* Support email subject variable substitution
* Real-time test email sending

### Prerequisites

* **Readdy Pro** plan required (project does not need to be published)
* A Resend account (free sign-up: [resend.com](https://resend.com))
* A custom domain added and verified in Resend; custom domains purchased on Readdy are supported

<Tip>
  Resend does not require your project to be published, but a Readdy Pro subscription is needed.
</Tip>

<Warning>
  Do not enter a Readdy subdomain (e.g. `xxx.readdy.ai`) in Resend — it cannot be verified.
</Warning>

***

## Entry Points

You can access the Resend configuration through:

**1. Connects Panel** — Click the **Connects** button in the project editor to find the Resend card.

<div style={{ display: 'flex', gap: '16px', alignItems: 'stretch' }}>
  <div style={{ flex: '1 1 50%', display: 'flex', flexDirection: 'column' }}>
    <Frame>
      <img src="https://mintcdn.com/readdy/DVR1m5KO54hpjW-t/images/go-to-connects.png?fit=max&auto=format&n=DVR1m5KO54hpjW-t&q=85&s=518b280f4f709d1d7017759adc5242f6" alt="Connects button in the top navigation bar" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="1516" height="904" data-path="images/go-to-connects.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Click the Connects button</p>
  </div>

  <div style={{ flex: '1 1 50%', display: 'flex', flexDirection: 'column' }}>
    <Frame>
      <img src="https://mintcdn.com/readdy/DVR1m5KO54hpjW-t/images/connects/resend.png?fit=max&auto=format&n=DVR1m5KO54hpjW-t&q=85&s=f91544d3cd8e70bb0339cde2016fd3e2" alt="Resend in the Connects panel" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="2010" height="1712" data-path="images/connects/resend.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Resend in the Connects panel</p>
  </div>
</div>

**2. TopBar Indicator** — After configuration, a Resend icon appears in the top toolbar; click it to quickly view status or access settings.

<div style={{ maxWidth: '420px', margin: '0 auto' }}>
  <Frame>
    <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/B.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=d37fb3c2204fdbe31a61dcb3151d1dc6" alt="Resend status indicator and dropdown menu in the TopBar" width="1010" height="654" data-path="images/resend/B.png" />
  </Frame>

  <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Resend status indicator and dropdown menu in the TopBar</p>
</div>

**3. Project Notification Settings** — In Project Settings > Notification Settings, you can see Resend configuration and the Brand Email toggle.

***

## Configuration Steps

Resend configuration consists of 4 steps: **API Key → Domain Selection → Email Settings → Test Send**.

<Steps>
  <Step title="Step 1: Enter API Key">
    Log in to the [Resend Console](https://resend.com/api-keys) and go to the **API Keys** page, then create a new API Key.

    <Warning>
      You must select **"Full Access"** permission. If you choose "Sending Access" or other restricted permissions, domain lists will fail to load and email sending will not work properly.
    </Warning>

    Copy the generated API Key (starts with `re_`), paste it in the Readdy Resend configuration panel, and click **"Next"** — the system will automatically validate the Key.

    The configuration panel includes a tutorial video to help you quickly learn how to create an API Key in Resend.

    <div style={{ display: 'flex', gap: '16px', alignItems: 'stretch' }}>
      <div style={{ flex: '1 1 50%', display: 'flex', flexDirection: 'column' }}>
        <Frame>
          <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/C.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=c320cf0260f2b648c9d3d79a24397ccf" alt="Resend Console API Key creation page" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="2066" height="1528" data-path="images/resend/C.png" />
        </Frame>

        <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Resend Console API Key creation page — select "Full Access" permission</p>
      </div>

      <div style={{ flex: '1 1 50%', display: 'flex', flexDirection: 'column' }}>
        <Frame>
          <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/D.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=f9f05b3067866c2cdcfad2c2c634c2ea" alt="API Key input step in Readdy" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="3322" height="1936" data-path="images/resend/D.png" />
        </Frame>

        <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>API Key input step in Readdy</p>
      </div>
    </div>
  </Step>

  <Step title="Step 2: Select Domain">
    After the API Key is validated, the system will automatically fetch your domain list from Resend.

    * **Verified domains** — Displayed with a green "Verified" badge; click to select directly
    * **Custom domains bound in Readdy (unverified)** — Support one-click verification; see details below
    * **Other domains (added only in Resend, unverified)** — Click "Verify" to go to the Resend Console, where you need to manually add DNS records to complete verification

    Only verified domains can be selected to proceed to the next step. If the domain list is empty, please add a domain in the Resend Console first.

    <Accordion title="One-Click Verification for Readdy Domains">
      If the domain you added in Resend was purchased or bound through Readdy, you can complete one-click verification with the following steps — no manual DNS configuration required:

      1. Add your domain in the Resend Console and go to the DNS Records configuration page
      2. You do not need to manually add DNS records — simply click the **"I've added the records"** button at the bottom of the page
      3. Return to the Readdy Resend configuration panel
      4. Find the domain in the domain list and click the **"Verify"** button next to it
      5. Readdy will automatically configure all required DNS records (DKIM, SPF, DMARC, etc.) for you
      6. Once verification is complete, click the **Refresh** button to update the domain status

      <Tip>
        One-click verification only applies to custom domains bound in Readdy. If your domain is managed by another provider (e.g. Cloudflare, GoDaddy, etc.), you will need to manually add DNS records in the Resend Console following the instructions on the DNS Records page.
      </Tip>
    </Accordion>

    <Frame>
      <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/E.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=466af3150bf7dfd65c1cb95ce59c15ab" alt="Domain selection list showing verified and unverified domains" width="3324" height="1930" data-path="images/resend/E.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Domain selection list in Readdy</p>

    <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px' }}>
      <div>
        <Frame>
          <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/F1.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=72c1078ec16fb251601e10943bcba025" alt="Resend DNS Records page" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="3840" height="1934" data-path="images/resend/F1.png" />
        </Frame>

        <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Resend DNS Records page — click "I've added the records"</p>
      </div>

      <div>
        <Frame>
          <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/F2.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=45e6c6dce2afb6f0c4a362a30fccf559" alt="Click Verify in Readdy" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="3326" height="1926" data-path="images/resend/F2.png" />
        </Frame>

        <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Click "Verify" button in Readdy</p>
      </div>

      <div>
        <Frame>
          <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/F3.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=4b921b3fbe76ae668d4ec22c95d03909" alt="Domain verified in Resend" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="2278" height="898" data-path="images/resend/F3.png" />
        </Frame>

        <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Domain verified in Resend Console</p>
      </div>

      <div>
        <Frame>
          <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/F4.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=f92501e7d66e9447bbcb82b75e7c4b0d" alt="Domain verified in Readdy" style={{ width: '100%', height: '300px', objectFit: 'cover' }} width="3300" height="1924" data-path="images/resend/F4.png" />
        </Frame>

        <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Domain now shows as verified in Readdy</p>
      </div>
    </div>
  </Step>

  <Step title="Step 3: Configure Email Settings">
    Configure your notification email sending information. A real-time email preview is displayed above the form:

    * **Sender Name** (required) — The display name recipients will see, e.g. "Your Company Name", up to 50 characters
    * **Sender Email** (required) — Enter the email prefix; the system will automatically append the selected domain. For example, entering `notification` results in `notification@yourdomain.com`. The default prefix is `notification`
    * **Email Subject** (required) — Supports the following variables:
      * Project name
      * Form name
      * Submission time
    * **Reply-To Address** (optional) — The address where user replies will be sent. If left empty, the sender email is used

    <Frame>
      <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/G.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=436151cb1342a96c59966f617bef705e" alt="Email configuration page with real-time preview" width="3322" height="1932" data-path="images/resend/G.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Email configuration page with real-time preview area</p>
  </Step>

  <Step title="Step 4: Send Test Email">
    Enter an email address to send a test email and verify your configuration.

    * After a successful send, click the **"Complete"** button to finish the configuration
    * You can also click **"Skip & Finish"** to complete the setup without sending a test

    <Frame>
      <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/H.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=563550b9c9658dd3e4d139157965d9c7" alt="Test email sending page" width="3326" height="1932" data-path="images/resend/H.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Test email sending page</p>
  </Step>
</Steps>

***

## Post-Connection Management

After configuration is complete, you enter the "Connected" state. In the configuration panel, you can:

* **View configuration summary** — API Key (masked), domain, and email settings details
* **Switch domain** — Click the "Switch" button on the domain card to select a different verified domain
* **Modify email settings** — Click the "Modify" button on the email settings card to change sender, subject, etc.
* **Send test email** — Click the "Send Test Email" button to verify your configuration at any time
* **Refresh status** — Click the refresh button in the top-right corner to get the latest configuration status
* **Disconnect** — Click the "Disconnect" link at the bottom

<Info>
  To change the API Key, you need to disconnect and reconfigure; or when the API Key becomes invalid, click the **"Reconfigure"** button to enter a new API Key.
</Info>

<Frame>
  <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/I.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=8a81357d9c8867860b0915344814680d" alt="Connected state configuration management panel" width="3324" height="1932" data-path="images/resend/I.png" />
</Frame>

<p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Connected state configuration management panel</p>

***

## Brand Email Toggle

In **Project Settings > Notification Settings**, you can use the **"Brand Email"** toggle to control whether Resend is used to send notification emails:

* **On** — Send emails using your configured brand domain and information
* **Off** — Send emails using Readdy's default method

After completing the Resend configuration for the first time, Brand Email is enabled by default.

<Frame>
  <img src="https://mintcdn.com/readdy/V10DZb-TtA2W-hU2/images/resend/J.png?fit=max&auto=format&n=V10DZb-TtA2W-hU2&q=85&s=b1bc34f7e89a341680aab9e50fea8a9c" alt="Brand Email toggle in Notification Settings" width="3838" height="1936" data-path="images/resend/J.png" />
</Frame>

<p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Brand Email toggle in Notification Settings</p>

***

## Error State Handling

<AccordionGroup>
  <Accordion title="Invalid API Key">
    **Symptom:** A red warning appears at the top of the configuration panel, showing "Configuration Invalid"

    **Cause:** The API Key was deleted, revoked, or has insufficient permissions in the Resend Console

    **Solution:** Click the "Reconfigure" button, create a new Full Access API Key in Resend, and re-enter it

    <Frame>
      <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/K1.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=90484e50e2f688711fe24d6a0a3004b2" alt="Invalid API Key error state" width="2900" height="1934" data-path="images/resend/K1.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Invalid API Key error state</p>
  </Accordion>

  <Accordion title="Domain Removed">
    **Symptom:** A red warning appears at the top of the configuration panel, indicating the domain has been removed

    **Cause:** The domain was deleted or its verification expired in the Resend Console

    **Solution:** Click the "Switch" button and select another verified domain

    <Frame>
      <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/K2.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=d266e7d14ce72f3b4aff44ac12c18d08" alt="Domain Removed error state" width="2798" height="1936" data-path="images/resend/K2.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Domain Removed error state</p>
  </Accordion>

  <Accordion title="Quota Exceeded">
    **Symptom:** An orange warning appears at the top of the configuration panel, indicating the quota has been exceeded

    **Cause:** The Resend account's monthly email sending quota has been exceeded

    **Solution:** Click "View in Resend" to upgrade your Resend plan or wait for the quota to reset

    <Frame>
      <img src="https://mintcdn.com/readdy/76BRQqPcvh85izEP/images/resend/K3.png?fit=max&auto=format&n=76BRQqPcvh85izEP&q=85&s=4e4569880e290cdbddd2b7e576b1276f" alt="Quota Exceeded error state" width="2802" height="1938" data-path="images/resend/K3.png" />
    </Frame>

    <p style={{ fontSize: '12px', color: '#666', textAlign: 'center', marginTop: '8px' }}>Quota Exceeded error state</p>
  </Accordion>
</AccordionGroup>

***

## FAQ

<AccordionGroup>
  <Accordion title="Can I use Resend without publishing my project?">
    Yes, Resend does not require your project to be published. However, a Readdy Pro subscription is required to use this feature.
  </Accordion>

  <Accordion title="What permission should I select for the API Key?">
    You must select **"Full Access"** permission. Restricted permissions such as "Sending Access" are insufficient for operations like fetching the domain list, and will cause configuration to fail. If you experience an empty domain list or sending failures, check your API Key permission settings first.
  </Accordion>

  <Accordion title="What should I do if the domain list is empty?">
    1. Confirm that the API Key has **Full Access** permission
    2. Confirm that you have added and verified a domain in the Resend Console
    3. Click the refresh button on the domain list to reload
    4. If it is still empty, click the "Add Domain" button to go to the Resend domain management page
  </Accordion>

  <Accordion title="What should I do if the test email fails to send?">
    Test sending may encounter the following errors:

    | Error           | Cause                                               | Solution                                                                                       |
    | --------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
    | Invalid API Key | API Key was deleted or has insufficient permissions | Click "Reconfigure" and create a new Full Access API Key                                       |
    | Domain Removed  | Domain was deleted in the Resend Console            | Go to Resend and check the domain status                                                       |
    | Rate Limited    | Too many sends in a short period                    | Wait a few minutes and click "Retry"                                                           |
    | Quota Exceeded  | Resend monthly sending quota exceeded               | Upgrade your Resend plan or wait for the quota to reset                                        |
    | Send Failed     | Other reasons                                       | Click "Retry"; if the issue persists, check domain verification status and API Key permissions |
  </Accordion>

  <Accordion title="What happens after disconnecting?">
    * Notification emails will revert to Readdy's default sending method
    * The sender will display as a Readdy email address instead of your brand email
    * The API Key will be removed from Readdy, but your Resend account will not be affected
    * You can reconfigure at any time
  </Accordion>

  <Accordion title="Why are Readdy subdomains not supported?">
    Resend requires a custom domain to send emails. Readdy subdomains (e.g. `xxx.readdy.ai`) are not domains you own and cannot be added or verified in Resend. Please bind your own custom domain in Readdy before using this feature.
  </Accordion>
</AccordionGroup>

## Need Help?

### Contact Support

* **Ask AI**: Available in your project
* **Readdy Support**: <a href="https://readdy.ai/feedback" target="_blank" rel="noopener noreferrer">Submit a support ticket</a>
