Email White Label - Add / verify

Overview

Create or update the email white-label sender for an account and verify its domain via Mandrill. If a fully-verified VerifiedEmail already exists for the company/email/tracking domain, the endpoint updates the sender name and returns already_verified. Otherwise it validates the email's domain through Mandrill. On success it creates or updates the VerifiedEmail and runs the Mandrill verification suite. It stamps domain_verified_at/url_verified_at once DKIM, DKIM2, DMARC, signing, and the tracking CNAME all pass. An invalid domain returns a 400 ("Invalid Domain").

Prerequisites

  • A bearer token. Callable with Partner and Account tokens.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/account/white-label/email/add

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Who can call it: Partner and Account tokens.

  • Authentication, role-agnostic account/white-label prefix.

  • company_id is required and scoped by an ownership check (must be in the caller's hierarchy).

  • A partner can configure any company beneath it. An account user only its own part of the account tree.

Rate limit

  • No rate limit.

Request body

  • Body:
FieldTypeRequiredDescription
company_idintegerrequiredMust be an existing account inside your own account tree.
sender_namestringrequiredmax 100, no angle brackets; stored as name.
emailstringrequiredemail:rfc,dns; the endpoint verifies its domain via Mandrill.
tracking_domainstringrequiredmax 100, no angle brackets; stored as tracking_url.
{
  "company_id": 5,
  "sender_name": "Acme Reviews",
  "email": "[email protected]",
  "tracking_domain": "track.acme.com"
}

Response

  • data.status (string) — "success" (new/updated unverified record) or "already_verified" (was already fully verified, name updated).
  • data.data (object|array) — the VerifiedEmail row (id, company_id, email, name, domain, tracking_url, domain_verified_at, url_verified_at, timestamps); empty array [] on the already_verified short-circuit branch.
  • data.verification (object) — Mandrill verification payload (verify_domain, check_domain, check_tracking_domain, default_settings); present only on the success branch.

200 OK (saved) · 200

{
  "data": {
    "status": "success",
    "data": {
      "company_id": 5,
      "email": "[email protected]",
      "tracking_url": "track.manage-myreviews.com",
      "domain": "manage-myreviews.com",
      "name": "hipages",
      "domain_verified_at": "2026-06-23 10:00:00",
      "url_verified_at": "2026-06-23 10:00:00",
      "updated_at": "2026-06-23T10:00:00.000000Z",
      "created_at": "2026-06-23T10:00:00.000000Z",
      "id": 1
    },
    "verification": {
      "verify_domain": {
        "status": "already_verified",
        "domain": "manage-myreviews.com",
        "email": "[email protected]"
      },
      "check_domain": {
        "domain": "manage-myreviews.com",
        "dkim": { "valid": true },
        "dkim2": { "valid": true },
        "dmarc": { "valid": true },
        "valid_signing": true
      },
      "check_tracking_domain": {
        "domain": "track.manage-myreviews.com",
        "cname": { "valid": true }
      },
      "default_settings": {
        "email": "[email protected]",
        "name": "Review Management",
        "tracking_url": "track.shoutaboutus.com"
      }
    }
  }
}

200 OK (already verified) · 200

{
  "data": {
    "status": "already_verified",
    "data": []
  }
}

400 Bad Request (invalid domain) · 400

{
  "message": "Bad Request",
  "status": "error",
  "errors": {
    "status": "error",
    "message": "Invalid Domain"
  }
}

422 Unprocessable Entity · 422

{
  "message": "The email field must be a valid email address.",
  "errors": {
    "email": [
      "The email field must be a valid email address."
    ],
    "sender_name": [
      "The sender name field is required."
    ]
  }
}

Errors

StatusMeaning
400Bad Request (invalid domain)
401The bearer token is missing, expired or invalid
422Unprocessable Entity
500Unexpected server error

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/account/white-label/email/add" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"company_id": 5, "sender_name": "Acme Reviews", "email": "[email protected]", "tracking_domain": "track.acme.com"}'

Did this page help you?