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

# DNS provider guides

> Where to paste the DKIM, SPF, and DMARC records Drin gives you — for Cloudflare, Namecheap, GoDaddy, AWS Route 53, and Vercel.

Adding a domain returns three records — a DKIM TXT, a custom MAIL FROM (MX + SPF), and a DMARC TXT. This page covers where and how to paste them in the most common DNS providers. The exact values are always the ones from your own Add-domain response, never the placeholders shown here.

Every provider stores the same thing — a `type`, a host (`name`), and a `value` — but each has its own quirks about how the host is written. The two rules that travel across all of them:

* **Copy the value verbatim.** DKIM and SPF values are long and a single dropped character breaks verification. Use copy, never retype.
* **Mind the host field.** Some providers want the *full* host (`drin1._domainkey.mail.acme.com`); others want it *relative* to your zone (`drin1._domainkey.mail`) and append the rest for you. When in doubt, paste the relative form — see each provider below.

<Note>
  **Get your real values first.** The DKIM, SPF, and DMARC values below are illustrative. Yours come from [adding your domain](/domains) — the dashboard [Domains](https://app.drin.run/domains) page shows each record with a copy button.
</Note>

## The three records, generically

Whatever the provider, you're publishing the same set. Here's what each one looks like and which provider field it maps to:

| Record               | Type  | Host / Name     | Notes                                                     |
| -------------------- | ----- | --------------- | --------------------------------------------------------- |
| DKIM                 | `TXT` | `…_domainkey.…` | Authorizes sending. Required.                             |
| MAIL FROM (envelope) | `MX`  | `send.…`        | Set the **priority** to `10`.                             |
| MAIL FROM (SPF)      | `TXT` | `send.…`        | Shares the host with the MX above — both records coexist. |
| DMARC                | `TXT` | `_dmarc.…`      | Policy record. Skip if one already exists (see below).    |

<Warning>
  **Don't double up on DMARC or SPF.** A domain may have only **one** `_dmarc` TXT and one root SPF TXT. If your domain already has them, don't add a second — merge the change into the existing record instead. The custom MAIL FROM SPF Drin gives you lives on a `send.` subdomain, so it won't collide with a root SPF.
</Warning>

## Cloudflare

From the dashboard, pick your domain, then **DNS → Records → Add record**.

* Set **Type** to `TXT` or `MX` to match the record.
* In **Name**, paste the host *relative* to your zone — Cloudflare appends your domain automatically. For `drin1._domainkey.mail.acme.com` on the zone `acme.com`, enter `drin1._domainkey.mail`. (You can also paste the full host; Cloudflare normalizes it.)
* Paste the **Content** / value verbatim. For the MX record, set **Priority** to `10`.
* **Turn the proxy OFF** (grey cloud, "DNS only") — proxying applies to web records, not mail. TXT/MX aren't proxyable anyway, so just confirm you're not using a CNAME through the orange cloud for any DKIM record.

## Namecheap

Go to **Domain List → Manage → Advanced DNS**, then **Add New Record**.

* Choose the record type. Namecheap labels SPF/DKIM/DMARC as plain `TXT Record` and the mail exchanger as `MX Record`.
* In **Host**, enter the host relative to your zone and drop the trailing domain. For `_dmarc.mail.acme.com` on `acme.com`, enter `_dmarc.mail`. For a record on the bare domain, use `@`.
* Paste the value into **Value**. For the MX record, set **Priority** to `10`.
* Leave **TTL** as `Automatic`. Namecheap can take longer to propagate, so allow extra time before re-verifying.

## GoDaddy

Open **Domain Portfolio → your domain → DNS → Add record**.

* Pick the **Type** (`TXT` or `MX`).
* GoDaddy's **Name** field is relative to your zone. Enter the host without the trailing domain — e.g. `send.mail` for a record on `send.mail.acme.com`. Use `@` for the root.
* Paste the **Value** verbatim. For MX, GoDaddy asks for a **Priority** — enter `10`.
* If GoDaddy auto-quotes long TXT values, paste the raw value without adding your own surrounding quotes.

## AWS Route 53

In the Route 53 console, open **Hosted zones → your zone → Create record**.

* Route 53 expects the **fully-qualified** record name. Enter the complete host as given — e.g. `drin1._domainkey.mail.acme.com` — typically by typing the subdomain portion into the **Record name** box while the zone suffix is shown beside it.
* For TXT records, Route 53 requires the value to be **wrapped in double quotes**: `"v=DKIM1; k=rsa; p=…"`. Add the quotes if the console doesn't.
* For the MX record, the **Value** is the priority and the host together on one line: `10 send-mx-host.example`.
* Leave routing policy as **Simple**.

<Tip>
  **Already on Route 53?** If you host DNS in Route 53, you can also delegate a sending subdomain to Drin and skip pasting records by hand. For most teams, publishing the three records directly is simplest — start there.
</Tip>

## Vercel

If your domain's nameservers point at Vercel, manage records under **your project → Settings → Domains** (or **Account → Domains → your domain**).

* Choose **Add → DNS Record** and set the **Type**.
* The **Name** field is relative to your zone. Enter the subdomain part only — `drin1._domainkey.mail` for a record on `drin1._domainkey.mail.acme.com`, or leave it blank / `@` for the apex.
* Paste the **Value** verbatim. For the MX record, fill in the **Priority** field with `10`.

## Confirm

After saving, give DNS a minute (sometimes longer), then hit **Verify now** on the [Domains](https://app.drin.run/domains) page or call the verify endpoint. Drin also re-checks on a background schedule, so a record that wasn't found yet will flip to verified on its own once it propagates. See [Verify a domain](/domains) for the full flow.

<Note>
  **Provider not listed?** The pattern is the same everywhere: match the type, put the host in the provider's "name/host" field (relative if it appends the zone, full if it doesn't), and paste the value untouched. The values to use are always the ones from your Add-domain response.
</Note>

<CardGroup cols={2}>
  <Card title="Verify a domain" icon="shield" href="/domains">
    The end-to-end flow: add, publish, verify, send.
  </Card>

  <Card title="Deliverability" icon="chart-line" href="/deliverability">
    What DKIM, SPF, and DMARC actually buy you — and how to keep them aligned.
  </Card>
</CardGroup>
