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

# Sending Domains

> Configure and verify a sending domain with SPF, DKIM, and DMARC so email providers trust Lettr to send from your From address

A sending domain is the domain you use in the "From" address of your emails, such as `yourcompany.com` in `hello@yourcompany.com`. Configuring a sending domain allows you to authenticate your emails with SPF, DKIM, and DMARC, which tells email providers that Lettr is authorized to send on your behalf. This authentication is essential for reaching inboxes instead of spam folders, building brand trust, and maintaining a positive sender reputation over time.

## Why Use a Sending Domain?

Configuring a sending domain provides four key benefits:

* **Authentication** — Authenticated emails pass SPF and DKIM checks, which significantly reduces the chance of being flagged as spam
* **Brand trust** — Recipients see your own domain in the "From" address rather than a generic or shared sender
* **Sender reputation** — Consistent sending from your domain builds a positive reputation that improves inbox placement across all providers
* **Advanced features** — A verified sending domain is a prerequisite for DMARC enforcement and BIMI, which displays your logo alongside your emails in supported clients

## Adding a Sending Domain

<Steps>
  <Step title="Add domain in Dashboard">
    Go to **Domains → Sending Domains** and click **+ New Sending Domain**. Enter your domain name.
  </Step>

  <Step title="Configure DNS Records">
    Add the required DNS records (see table below—root domains need SPF, DKIM, DMARC; subdomains need DKIM, DMARC, and Bounce CNAME only).
  </Step>

  <Step title="Verify Domain">
    Click **Verify** to confirm DNS propagation. Verification typically takes a few minutes but can take up to 48 hours.
  </Step>
</Steps>

<Card title="Try it in the app" icon="wand-magic-sparkles" href="https://app.lettr.com/domains/sending?guide=eyJ2IjoxLCJzdGVwcyI6W3siYW5jaG9yIjoiZG9tYWlucy5hZGQiLCJtZXNzYWdlIjoiU3RhcnQgaGVyZSB0byBhZGQgYSBuZXcgc2VuZGluZyBkb21haW4uIFVzZSBhIHN1YmRvbWFpbiBsaWtlIG1haWwueW91cmRvbWFpbi5jb20gdG8ga2VlcCB5b3VyIHJvb3QgZG9tYWluIHJlcHV0YXRpb24gc2VwYXJhdGUuIn0seyJhbmNob3IiOiJkb21haW5zLm5hbWUtaW5wdXQiLCJtZXNzYWdlIjoiRW50ZXIgdGhlIGRvbWFpbiB5b3Ugd2lsbCBzZW5kIGZyb20sIGUuZy4gbWFpbC55b3VyY29tcGFueS5jb20uIFRoaXMgYmVjb21lcyB0aGUgRnJvbSBhZGRyZXNzIG9uIHlvdXIgZW1haWxzLiJ9LHsiYW5jaG9yIjoiZG9tYWlucy5zdWJtaXQiLCJtZXNzYWdlIjoiQ3JlYXRlIHRoZSBkb21haW4uIExldHRyIGdlbmVyYXRlcyB0aGUgdW5pcXVlIERLSU0ga2V5IGFuZCBETlMgcmVjb3JkcyB5b3UgbmVlZCBuZXh0LiJ9LHsiYW5jaG9yIjoiZG9tYWlucy5kbnMtcmVjb3JkcyIsIm1lc3NhZ2UiOiJBZGQgdGhlc2UgQ05BTUUsIERLSU0gYW5kIERNQVJDIHJlY29yZHMgYXQgeW91ciBETlMgcHJvdmlkZXIuIENvcHkgZWFjaCB2YWx1ZSBleGFjdGx5IGFzIHNob3duLiJ9LHsiYW5jaG9yIjoiZG9tYWlucy52ZXJpZnkiLCJtZXNzYWdlIjoiT25jZSBETlMgaGFzIHByb3BhZ2F0ZWQsIHZlcmlmeSB0byBjb25maXJtIFNQRiwgREtJTSBhbmQgRE1BUkMuIFRoaXMgY2FuIHRha2UgYSBmZXcgbWludXRlcyB1cCB0byA0OCBob3Vycy4ifV0sImRvY3MiOiJodHRwczovL2RvY3MubGV0dHIuY29tL2xlYXJuL2RvbWFpbnMvc2VuZGluZy1kb21haW5zIn0">
  Follow an interactive walkthrough of this guide inside Lettr.
</Card>

### Via API

Create a sending domain with the API:

```bash theme={null}
curl -X POST https://app.lettr.com/api/domains \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "example.com"
  }'
```

Response with DNS records to configure:

```json theme={null}
{
  "message": "Domain created successfully.",
  "data": {
    "domain": "example.com",
    "status": "pending",
    "status_label": "Pending Review",
    "dkim": {
      "public": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ...",
      "selector": "scph0722",
      "headers": "from:to:subject:date"
    }
  }
}
```

## DNS Records Configuration

After adding your domain, configure these DNS records with your DNS provider:

### CNAME Record (Domain Verification)

The CNAME record verifies domain ownership and enables bounce handling.

| Field     | Value               |
| --------- | ------------------- |
| Type      | CNAME               |
| Host/Name | `@` (root domain)   |
| Value     | `sparkpostmail.com` |

### DKIM Record

DKIM (DomainKeys Identified Mail) enables email signing to verify message authenticity.

| Field     | Value                                                 |
| --------- | ----------------------------------------------------- |
| Type      | TXT                                                   |
| Host/Name | `{selector}._domainkey` (selector provided by Lettr)  |
| Value     | `v=DKIM1; k=rsa; h=sha256; p=...` (provided by Lettr) |

<Note>
  The DKIM selector and public key are unique to your domain and will be provided when you add your domain. The selector might look like `scph0722`, so your full hostname would be `scph0722._domainkey.example.com`. Copy the values exactly as shown.
</Note>

### DMARC Record

DMARC ties together SPF and DKIM to protect against spoofing. Start with a monitoring policy:

| Field     | Value                                            |
| --------- | ------------------------------------------------ |
| Type      | TXT                                              |
| Host/Name | `_dmarc`                                         |
| Value     | `v=DMARC1; p=none; rua=mailto:dmarc@example.com` |

<Tip>
  See our [DMARC guide](/learn/domains/dmarc) for recommended rollout strategies and policy options.
</Tip>

## Verifying Your Domain

After configuring DNS records, verify your domain:

### Via Dashboard

1. Go to **Domains** → **Sending**
2. Find your domain and click **Verify**
3. Wait for verification to complete (usually within a few minutes)

### Via API

```bash theme={null}
curl -X POST https://app.lettr.com/api/domains/example.com/verify \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx"
```

Response:

```json theme={null}
{
  "message": "Domain verification completed.",
  "data": {
    "domain": "example.com",
    "dkim_status": "valid",
    "cname_status": "valid",
    "dmarc_status": "valid",
    "spf_status": "valid",
    "ownership_verified": true,
    "is_primary_domain": true
  }
}
```

## Domain Status

### Verification Status

Each DNS record has its own verification status:

| Status           | Description                                                                               |
| ---------------- | ----------------------------------------------------------------------------------------- |
| `valid`          | Record found and valid                                                                    |
| `unverified`     | Record not yet detected                                                                   |
| `invalid`        | Record found but invalid                                                                  |
| `missing`        | No record found                                                                           |
| `not_applicable` | Record not required for this domain type (e.g., SPF on subdomains, CNAME on root domains) |

### Approval Status

Sending domains also have an approval status that determines whether you can send emails:

| Status     | Label          | Can Send? |
| ---------- | -------------- | --------- |
| `approved` | Approved       | Yes       |
| `pending`  | Pending Review | No        |
| `blocked`  | Blocked        | No        |

<Note>
  Lettr automatically evaluates new domains for approval based on domain age, reputation, and other factors. Most legitimate business domains are approved automatically.
</Note>

## Check Domain Status

### Via API

```bash theme={null}
curl https://app.lettr.com/api/domains/example.com \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx"
```

```json theme={null}
{
  "message": "Domain retrieved successfully.",
  "data": {
    "domain": "example.com",
    "status": "approved",
    "status_label": "Approved",
    "can_send": true,
    "cname_status": "valid",
    "dkim_status": "valid",
    "dmarc_status": "valid",
    "spf_status": "valid",
    "is_primary_domain": true,
    "tracking_domain": "links.example.com",
    "dns_provider": "cloudflare",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:35:00Z"
  }
}
```

## Sending Emails from Your Domain

Once verified, you can send emails from any address on your domain:

```bash theme={null}
curl -X POST https://app.lettr.com/api/emails \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@example.com",
    "to": ["recipient@other.com"],
    "subject": "Welcome!",
    "html": "<p>Thanks for signing up!</p>"
  }'
```

### Using a From Name

Customize the sender display name:

```bash theme={null}
curl -X POST https://app.lettr.com/api/emails \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@example.com",
    "from_name": "Your Company",
    "to": ["recipient@other.com"],
    "subject": "Welcome!",
    "html": "<p>Thanks for signing up!</p>"
  }'
```

This appears in email clients as: **Your Company** `<hello@example.com>`

## Multiple Sending Domains

You can verify multiple domains for different purposes:

| Domain                          | Use Case                        |
| ------------------------------- | ------------------------------- |
| `yourcompany.com`               | General business communications |
| `mail.yourcompany.com`          | Marketing and newsletters       |
| `notifications.yourcompany.com` | Automated transactional emails  |
| `support.yourcompany.com`       | Customer support communications |

<Tip>
  Using subdomains for different email types helps isolate reputation. If marketing emails generate complaints, your transactional email reputation remains protected.
</Tip>

## Associating a Tracking Domain

Link a [tracking domain](/learn/domains/tracking-domains) to your sending domain for branded tracking links:

### Via Dashboard

1. Go to **Domains** → **Sending**
2. Select your sending domain
3. Under **Tracking Domain**, select or add a tracking domain

## Configuring a Custom Bounce Domain

By default, bounce notifications use SparkPost's shared bounce domain as the Return-Path. You can instead use your own sending domain as the bounce domain, which achieves SPF alignment alongside DKIM alignment and removes "via" labels in some email clients.

<Steps>
  <Step title="Verify the CNAME">
    Make sure your sending domain's CNAME record shows a `valid` status. The Bounce Domain toggle is disabled until the CNAME is verified.
  </Step>

  <Step title="Open the domain detail page">
    Go to **Domains → Sending Domains** and click the domain you want to configure.
  </Step>

  <Step title="Locate the Bounce Domain card">
    Scroll to the **Bounce Domain** card on the domain's settings page.
  </Step>

  <Step title="Enable the toggle">
    Switch **Use this sending domain as bounce domain** on. Bounce messages will now use this domain's Return-Path instead of the SparkPost default.
  </Step>
</Steps>

See [Custom Return-Path and MAIL FROM](/knowledge-base/fundamentals/custom-return-path) for the full background on Return-Path, SPF alignment, and header-level details.

## List All Sending Domains

```bash theme={null}
curl https://app.lettr.com/api/domains \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx"
```

```json theme={null}
{
  "message": "Domains retrieved successfully.",
  "data": [
    {
      "domain": "example.com",
      "status": "approved",
      "status_label": "Approved",
      "can_send": true,
      "cname_status": "valid",
      "dkim_status": "valid",
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-15T10:35:00Z"
    },
    {
      "domain": "notifications.example.com",
      "status": "approved",
      "status_label": "Approved",
      "can_send": true,
      "cname_status": "valid",
      "dkim_status": "valid",
      "created_at": "2024-01-15T11:00:00Z",
      "updated_at": "2024-01-15T11:05:00Z"
    }
  ]
}
```

## Delete a Sending Domain

<Warning>
  Deleting a domain removes all associated DNS verification. You won't be able to send emails from this domain until it's re-added and verified.
</Warning>

### Via Dashboard

1. Go to **Domains** → **Sending**
2. Find the domain and click the **Delete** button
3. Confirm deletion

### Via API

```bash theme={null}
curl -X DELETE https://app.lettr.com/api/domains/example.com \
  -H "Authorization: Bearer lttr_xxxxxxxxxxxx"
```

## Troubleshooting

<AccordionGroup>
  <Accordion title="DNS records not detected">
    * DNS changes can take up to 48 hours to propagate, though most complete within minutes
    * Verify records are added to the correct domain/subdomain
    * Check for typos in record values
    * Ensure you're using the correct record type (TXT vs CNAME)
    * Try using a DNS lookup tool like [MXToolbox](https://mxtoolbox.com/) to verify your records
  </Accordion>

  <Accordion title="DKIM verification failing">
    * Ensure the entire DKIM value is copied (it's a long string)
    * Check that the hostname uses the correct selector (e.g., `scph0722._domainkey`, not just `_domainkey`)
    * Some DNS providers require you to remove quotes from the value
    * Verify the record type is TXT, not CNAME
  </Accordion>

  <Accordion title="CNAME verification failing">
    * Ensure the CNAME record points to `sparkpostmail.com`
    * The CNAME should be set on your root domain
    * Some DNS providers don't allow CNAME on root domains - contact support for alternatives
  </Accordion>

  <Accordion title="Domain stuck in pending status">
    * New domains undergo automatic approval review
    * Domains less than 30 days old may require manual review
    * Contact support if your domain remains pending for more than 24 hours
  </Accordion>

  <Accordion title="Cannot send from verified domain">
    * Check that domain status is `approved`, not just verified
    * Verify your API key has permission to send emails
    * Ensure you're using the exact domain that was verified
  </Accordion>
</AccordionGroup>

## Best Practices

* **Separate email types** — Use different subdomains (e.g., `mail.example.com` for marketing, `notifications.example.com` for transactional) so that complaints against one type don't affect the reputation of another
* **Start DMARC gradually** — Begin with a `p=none` policy to monitor authentication results before moving to stricter enforcement — jumping straight to `p=reject` can block legitimate emails if your configuration isn't complete
* **Configure a tracking domain** — Set up a [tracking domain](/learn/domains/tracking-domains) so that open and click tracking links use your brand instead of Lettr's default domain, improving both deliverability and recipient trust
* **Monitor deliverability** — Check your metrics regularly through the Lettr dashboard, and keep your DNS records updated if you change email infrastructure providers

## Related Topics

<CardGroup cols={2}>
  <Card title="Tracking Domains" icon="chart-line" href="/learn/domains/tracking-domains">
    Set up custom tracking domains
  </Card>

  <Card title="DMARC" icon="shield" href="/learn/domains/dmarc">
    Configure DMARC policies
  </Card>

  <Card title="BIMI" icon="image" href="/learn/domains/bimi">
    Display your logo in email clients
  </Card>

  <Card title="Sending Emails" icon="paper-plane" href="/learn/sending/introduction">
    Start sending emails
  </Card>
</CardGroup>
