Skip to main content

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.

The client.domains resource manages your sending domains — useful for multi-tenant apps onboarding customer domains, or for automating DNS verification. For the concepts behind domain setup (SPF, DKIM, DMARC), see Sending Domains.

List Domains

const { data, error } = await client.domains.list();

if (!error) {
  for (const domain of data.domains) {
    console.log(domain.domain);        // example.com
    console.log(domain.status);        // "pending" | "approved" | "blocked"
    console.log(domain.can_send);      // boolean
    console.log(domain.dkim_status);   // "valid" | "invalid" | null
    console.log(domain.cname_status);
  }
}

API Reference

GET /domains

Add a Domain

const { data, error } = await client.domains.create("example.com");

if (!error) {
  console.log(data.domain);        // example.com
  console.log(data.status_label);  // "Pending Review"

  // DKIM record to publish in DNS
  console.log(data.dkim.selector);
  console.log(data.dkim.public);
  console.log(data.dkim.headers);
}

API Reference

POST /domains

Get Domain Details

const { data, error } = await client.domains.get("example.com");

if (!error) {
  console.log(data.status_label);
  console.log(data.can_send);
  console.log(data.dmarc_status);
  console.log(data.spf_status);
  console.log(data.tracking_domain);

  if (data.dns.dkim) {
    console.log(data.dns.dkim.selector, data.dns.dkim.public);
  }
}

API Reference

GET /domains/

Verify Domain DNS

After publishing the records, trigger a verification check:
const { data, error } = await client.domains.verify("example.com");

if (!error) {
  console.log(data.dkim_status);  // "valid", "invalid", "missing", ...
  console.log(data.cname_status);
  console.log(data.dmarc_status);
  console.log(data.spf_status);

  // Per-record errors, when present
  if (data.dns?.dkim_error) console.error("DKIM:", data.dns.dkim_error);
  if (data.dns?.spf_error) console.error("SPF:", data.dns.spf_error);
}
DNS changes take time to propagate. If verification fails right after publishing, wait a few minutes and retry. See Domain Verification troubleshooting.

API Reference

POST /domains//verify

Delete a Domain

const { error } = await client.domains.delete("example.com");
Deleting a domain stops all sending from it immediately. Emails from a deleted domain fail with a validation error.

API Reference

DELETE /domains/

What’s Next

Sending Domains

DNS setup: SPF, DKIM, DMARC

Webhooks

Receive delivery and engagement events