# Add domain

> Add a sending domain.

Source: https://sndr.sh/docs/cranl/domains/add-domain

`POST https://api.sndr.sh/api/cranl/v1/domains`

Add a sending domain. Returns 201 with the domain (status pending) and the DNS records to publish; required ones have required: true.

Scope: `send`

**Body** (JSON)

- `name` (string, required): Domain or subdomain to send from, e.g. mail.acme.com.
- `region` (string): Region label stored on the domain. Defaults to us-east-1.

**Request**

```bash
curl -X POST 'https://api.sndr.sh/api/cranl/v1/domains' \
  -H 'Authorization: Bearer sndr_your_access_token' \
  -H 'Content-Type: application/json' \
  -d '{"name": "mail.acme.com"}'
```

**Response** (201)

```json
{
  "id":              "dom_a7c2e910-4b1",
  "organization_id": "org_8d41c7a2-3f6",
  "name":            "mail.acme.com",
  "status":          "pending",
  "region":          "us-east-1",
  "spf_status":      "unknown",
  "dkim_status":     "unknown",
  "dmarc_status":    "unknown",
  "mx_status":       "unknown",
  "tls_rpt_status":  "unknown",
  "mta_sts_status":  "unknown",
  "bimi_status":     "unknown",
  "records": [
    {
      "type":     "TXT",
      "name":     "mail.acme.com",
      "value":    "v=spf1 include:_spf.sndr.sh ~all",
      "status":   "unknown",
      "hint":     "Add include:_spf.sndr.sh to your existing SPF record, or use this value if no SPF record exists. Keep one SPF record and retain your other mail providers.",
      "required": true,
      "label":    "SPF"
    },
    {
      "type":     "TXT",
      "name":     "sndr._domainkey.mail.acme.com",
      "value":    "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
      "status":   "unknown",
      "hint":     "DKIM signing key — every outgoing message is signed with it.",
      "required": true,
      "label":    "DKIM"
    },
    {
      "type":     "TXT",
      "name":     "_dmarc.mail.acme.com",
      "value":    "v=DMARC1; p=quarantine; rua=mailto:dmarc@mail.acme.com; ruf=mailto:dmarc@mail.acme.com; pct=100; adkim=r; aspf=r",
      "status":   "unknown",
      "hint":     "Policy that ties SPF + DKIM together. Tells receivers what to do with messages that fail.",
      "required": true,
      "label":    "DMARC"
    }
  ],
  "created_at": "2026-06-01T12:00:00Z"
}
```

**Errors**

- `unauthenticated` (401): Missing or invalid Bearer token.
- `token_expired` (401): Access token expired — exchange the refresh token for a new pair.
- `token_revoked` (401): Token was explicitly revoked.
- `invalid_request` (400): Body is not valid JSON, or name is missing or not a valid domain name.
- `plan_limit_reached` (402): The plan’s domain limit is reached.
- `insufficient_scope` (403): Token is missing the send scope.
- `conflict` (409): This domain is already added to the connected account.
