Domains

Add domain

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

POSThttps://api.sndr.sh/api/cranl/v1/domains
Add domain
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"}'
201Created
{
  "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"
}

Authorization

Authorizationstringheaderrequired

Bearer followed by an access token. Needs the send scope.

Body

application/json
namestringrequired

Domain or subdomain to send from, e.g. mail.acme.com.

regionstring

Region label stored on the domain. Defaults to us-east-1.

Errors

401unauthenticatedMissing or invalid Bearer token.
401token_expiredAccess token expired — exchange the refresh token for a new pair.
401token_revokedToken was explicitly revoked.
400invalid_requestBody is not valid JSON, or name is missing or not a valid domain name.
402plan_limit_reachedThe plan’s domain limit is reached.
403insufficient_scopeToken is missing the send scope.
409conflictThis domain is already added to the connected account.