---
title: "Create Email Domain"
method: POST
path: "/workspaces/{workspace_id}/emails/domains"
tags: ["Emails::Domain"]
---

# Create Email Domain

`POST /workspaces/{workspace_id}/emails/domains`

## Request

- Base URL: `https://myworkspace.myclickfunnels.com/api/v2`
- URL: `https://myworkspace.myclickfunnels.com/api/v2/workspaces/{workspace_id}/emails/domains`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://accounts.myclickfunnels.com/oauth/authorize`
    - Token URL: `https://accounts.myclickfunnels.com/oauth/token`
- TypeScript: <https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/docs/workspaces/:workspace_id/emails/domains/post.ts> (a function with typed inputs; its response is checked against the schema)

Provision a sending domain for a workspace. Find-or-create: returns `200` with the existing record if a domain with this name already exists for the workspace, or `201` with freshly generated DNS records if it was just created. These are **email sending** domains (DKIM/SPF/DMARC) - for website/hosting domains, see **listDomains**. The response includes the email-transport records; `dkim_record` can be `null` until the DKIM key finishes generating, and POSTing the same name again retries provisioning. Provisioning also creates a `no-reply@<name>` sender address on the new domain. Follow `next_steps`, which distinguishes the required ownership step, the required transport records, and the recommended return-path record; verified SMTP replaces DKIM/SPF/DMARC. Ownership (`ownership_verified`) is proved by connecting the domain, as `www.example.com` or another subdomain of it, to this workspace as a website/hosting domain in the ClickFunnels app, not through this API. Ownership is confirmed at the root domain, so provision `example.com` rather than a subdomain such as `mail.example.com`, which is rejected with `422` naming the root domain to use instead. Then call **verifyEmailsDomains** until `ready_for_sending` is true; a `200` there means the check ran, not that it passed. The top-level `verified` field means transport only; sender readiness requires both ownership and transport. Return-path verification is independent. Once ready, create addresses via `POST /workspaces/{workspace_id}/emails/addresses` with `emails_domain_id` set to this domain's numeric `id`.

## Path parameters

- `workspace_id` string, required

## Request body

- object
  - `emails_domain` EmailsDomainParameters, required: A sending domain to provision for a workspace.
    - `name` string, required: A valid public bare root domain name to provision as a sending domain (e.g. `example.com`), with no URL scheme, port, path, or whitespace. Ownership is confirmed at the root domain, so a subdomain such as `mail.example.com` is rejected with `422` naming the root domain to use instead. The name is trimmed and lowercased before it is matched or created. If a sending domain with this name already exists for the workspace, it is returned as-is rather than creating a duplicate.

## Response `200`

OK - a sending domain with this name already existed for the workspace and is returned as-is.

- EmailsDomainAttributes: Email Domains
  - `id` integer: Email Domain ID
  - `public_id` string, nullable: Email Domain public ID
  - `workspace_id` integer: Workspace ID
  - `name` string: The sending domain name (lowercase), e.g. `example.com` - the part after the `@` shared by every email address created on this domain.
  - `ownership_verified` boolean: Whether ClickFunnels has confirmed that this workspace owns the domain name. It becomes true when the same name is connected to this workspace as a website/hosting domain whose ownership is verified - done in the ClickFunnels app, not through this API. No API call can make it true; ask the customer to connect the domain.
  - `verified` boolean: Whether email transport is verified. True once DKIM, SPF, and DMARC are all verified via DNS, or when a verified SMTP setting exists. This field does not prove domain ownership and is not sufficient by itself to send.
  - `ready_for_sending` boolean: Whether addresses on this custom domain can be used as senders. True only when both `ownership_verified` and the transport-only `verified` field are true. The return-path record is independent and does not control this value.
  - `dkim_verified` boolean: Whether the domain's DKIM DNS record is verified.
  - `spf_verified` boolean: Whether the domain's SPF DNS record is verified.
  - `dmarc_verified` boolean: Whether the domain's DMARC DNS record is verified.
  - `smtp_verified` boolean: Whether email transport is verified via a verified SMTP setting (an alternative to DKIM/SPF/DMARC verification). When true, `verified` can be true while dkim_verified/spf_verified/dmarc_verified are false; ownership must still be verified before `ready_for_sending` becomes true.
  - `return_address_verified` boolean: Whether the domain's return-path CNAME record (used for bounce handling) is verified. This is independent of `verified` and `ready_for_sending` and is not required for either one to become true.
  - `dkim_record` DnsRecord: A single DNS record to add at the domain's DNS provider to configure email transport (or, for the return path, bounce handling).
    - `type` string: The DNS record type (e.g. `TXT`, `CNAME`).
    - `name` string: The DNS host/name to create the record on (e.g. `example.com` or `_dmarc.example.com`).
    - `value` string: The exact value to paste at the registrar for this record.
    - `ttl` integer: Recommended TTL, in seconds, for the record.
    - `verified` boolean: Whether this specific record has been confirmed live at the DNS provider. It reflects stored DNS verification state; call `verifyEmailsDomains` to re-check.
  - `spf_record` DnsRecord: A single DNS record to add at the domain's DNS provider to configure email transport (or, for the return path, bounce handling).
    - `type` string: The DNS record type (e.g. `TXT`, `CNAME`).
    - `name` string: The DNS host/name to create the record on (e.g. `example.com` or `_dmarc.example.com`).
    - `value` string: The exact value to paste at the registrar for this record.
    - `ttl` integer: Recommended TTL, in seconds, for the record.
    - `verified` boolean: Whether this specific record has been confirmed live at the DNS provider. It reflects stored DNS verification state; call `verifyEmailsDomains` to re-check.
  - `dmarc_record` DnsRecord: A single DNS record to add at the domain's DNS provider to configure email transport (or, for the return path, bounce handling).
    - `type` string: The DNS record type (e.g. `TXT`, `CNAME`).
    - `name` string: The DNS host/name to create the record on (e.g. `example.com` or `_dmarc.example.com`).
    - `value` string: The exact value to paste at the registrar for this record.
    - `ttl` integer: Recommended TTL, in seconds, for the record.
    - `verified` boolean: Whether this specific record has been confirmed live at the DNS provider. It reflects stored DNS verification state; call `verifyEmailsDomains` to re-check.
  - `return_address_record` DnsRecord: A single DNS record to add at the domain's DNS provider to configure email transport (or, for the return path, bounce handling).
    - `type` string: The DNS record type (e.g. `TXT`, `CNAME`).
    - `name` string: The DNS host/name to create the record on (e.g. `example.com` or `_dmarc.example.com`).
    - `value` string: The exact value to paste at the registrar for this record.
    - `ttl` integer: Recommended TTL, in seconds, for the record.
    - `verified` boolean: Whether this specific record has been confirmed live at the DNS provider. It reflects stored DNS verification state; call `verifyEmailsDomains` to re-check.
  - `next_steps` string[]: Plain-English guidance you can surface to users. It distinguishes the required ownership step (connect the domain to the workspace in ClickFunnels) and the required transport records from the recommended ClickFunnels return path, accounts for verified SMTP, and explains how to re-check readiness.
  - `created_at` string, date-time, nullable: Created at datetime
  - `updated_at` string, date-time, nullable: Updated at datetime

## Other responses

- `201`: Created - a new sending domain was provisioned; its DNS records were just generated.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity

## Changes

- **2026-11-03** `511d88b30aea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/changes/workspaces/:workspace_id/emails/domains/post.md)

---

[API](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api.md) - [All operations](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/llms.txt) - [OpenAPI document](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/revisions/511d88b30aea?raw)
