# Custom domains for SaaS, connected and verified · DoDomain

> Custom domains for SaaS: a hosted connect flow with Cloudflare one-click, guided DNS elsewhere, authoritative verification, signed webhooks, monitoring.

- Canonical HTML page: https://dodomain.io
- This Markdown twin: https://dodomain.io/index.md
- Site index for agents: https://dodomain.io/llms.txt
- Full documentation as Markdown: https://dodomain.io/docs/llms-full.txt

Generated at build time from the same React source the HTML page renders, never a hand-maintained second copy. Every public page on this host has a twin at `<url>.md`.

---

Custom domains for SaaS

## Custom domains, without the DNS support queue.

Give every user a clear path from “connect my domain” to verified DNS. DoDomain handles provider detection, one-click Cloudflare, guided setup everywhere else, signed webhooks, and the checks that come after launch.

[Start with 50 free](https://app.dodomain.io/signin?mode=signup) [Read the quickstart](https://dodomain.io/docs)

[Add DoDomain to Claude](https://claude.ai/directory/a7fc39a1-9ea8-48f0-9d66-2ac84f2508d1): one click opens DoDomain's listing in Claude's connector directory.

Onboard your agent to DoDomain: paste this sentence into any AI coding agent.

```
Fetch and execute the appropriate instructions to set me up for DoDomain from https://dodomain.io/agent-setup/prompt.md
```

- REST API available now
- No proxy or traffic lock-in
- SDKs on npm and PyPI
- Free drift monitoring on every plan

Your product sends a domain and the records it needs.

DoDomain returns proof when authoritative DNS is live.

Works with your customers' DNS provider

### Supported DNS providers

Cloudflare custom domains, NameSilo DNS setup, Vercel and more: each provider below links to what the nightly watch measured, template by template. Anyone else gets guided setup with the exact records and live verification.

- [Cloudflare: One-click, all 5 templates proven. Also scoped OAuth](https://dodomain.io/domain-connect/cloudflare)
- [Glauca: One-click, all 5 templates proven](https://dodomain.io/domain-connect/glauca)
- [GoDaddy: One-click proven on 2 of 5 templates, serves 5](https://dodomain.io/domain-connect/godaddy)
- [Vercel: One-click proven on 1 of 5 templates, serves 2](https://dodomain.io/domain-connect/vercel)
- [Domain Chief: Serves 5 of 5 templates, apply not yet proven](https://dodomain.io/domain-connect/domain-chief)
- [NameSilo: Serves 5 of 5 templates, apply not yet proven](https://dodomain.io/domain-connect/namesilo)
- [Simply.com: Serves 5 of 5 templates, apply not yet proven](https://dodomain.io/domain-connect/simply-com)
- [GoDaddy reseller: Serves 5 of 5 templates, apply not yet proven](https://dodomain.io/domain-connect/godaddy-reseller)
- [Danego DNS: Serves 5 of 5 templates, apply not yet proven](https://dodomain.io/domain-connect/danego-dns)
- [Every other DNS provider: Guided setup with live verification. 14 providers measured nightly.](https://dodomain.io/state-of-domain-connect)

### One flow. The best available path for each provider.

DNS is fragmented; your product should not feel that way. DoDomain adapts the setup without changing the contract your backend integrates against.

A

#### Cloudflare: scoped OAuth

Your user approves the change on Cloudflare's own page. DoDomain writes only the requested records, verifies them, and never stores the grant.

**One click**

B

#### Everywhere else: guided, not generic

Provider detection opens the right dashboard and explains its host-field quirks. Every record has an exact value, a copy action, and its own live status.

**22 provider guides**

C

#### Every success: independently verified

OAuth consent and redirect callbacks are not proof. Success is declared only after the expected values are confirmed at the authoritative source: the domain's nameservers, or the provider's own API on one-click.

**One truth signal**

### A specific guide beats “go update your DNS.”

One-click is proven on Cloudflare, Glauca HexDNS and Vercel today. These providers have dedicated manual guidance and a universal fallback catches the rest.

- Cloudflare
- GoDaddy
- Namecheap
- Squarespace
- Route 53
- Bluehost
- DigitalOcean
- DNSimple
- DreamHost
- Gandi
- HostGator
- Hostinger
- IONOS
- Name.com
- NameSilo
- one.com
- OVHcloud
- Porkbun
- STRATO
- Vercel
- Wix
- WordPress.com

### Three boundaries. No DNS logic in your product.

The supported integration is plain HTTPS plus a hosted link. The same contract sits underneath the published SDKs and the MCP server agents call.

01

#### Mint a connect session

Your server sends the domain and the DNS records your product needs. The secret key stays server-side; the browser only receives a short-lived session token.

`POST /api/v1/sessions`domain + records + returnUrl

02

#### Hand the flow to your user

Open the hosted link. DoDomain detects the DNS provider, offers scoped Cloudflare OAuth when available, and falls back to provider-specific instructions everywhere else.

`connectUrl`one clear path, no dead end

03

#### Trust the verified event

A callback is never treated as proof. DoDomain verifies the records at the authoritative source first, records the connection, and then signs the webhook sent to your server.

`connection.verified`HMAC-SHA256 signed

03 / START WITH HTTP

### The first connection is one request away.

Create an app, keep the `dd_sk_…` key on your server, and mint a 24-hour session. Send the returned `connectUrl` to your user. No framework or browser package is required.

[Open the five-minute guide](https://dodomain.io/docs) [Read the API reference](https://dodomain.io/docs/api) [Browse the SDKs](https://dodomain.io/docs/sdks)

**Available now:** REST API + hosted flow **SDKs:** @dodomain/node · @dodomain/connect · @dodomain/react on npm · dodomain-sdk on PyPI **For agents:** a remote MCP server, OAuth 2.1, at `app.dodomain.io/api/mcp`

create-session.tssupported today

```
// Your server const response = await fetch( "https://app.dodomain.io/api/v1/sessions", { method: "POST", headers: { authorization: Bearer ${DODOMAIN_KEY}, "content-type": "application/json" }, body: JSON.stringify({ domain: "app.customer.com", records: [{ type: "CNAME", host: "app", value: "edge.yourproduct.com" }]} }) }) }); const { connectUrl } = await response.json();
```

200 ok`https://app.dodomain.io/connect/dd_sess_…`

### Free DNS drift monitoring, on every plan. Not a metered add-on.

Domains move, records get deleted, and certificates stop renewing. DoDomain keeps rechecking every verified connection against authoritative DNS (every 10 minutes for its first day, hourly for a week, then every 6 hours) and emits an event only when the state actually changes.

- Included on Free, Pro and Scale alike: no per-domain monitoring meter
- Suspected drift is confirmed on three consecutive checks before you are told
- Exact failing records named in the signed drift event
- Recovery event when the records come back

1. Day 0
   
   **app.customer.com connected**`connection.verified`
2. Day 43
   
   **CNAME no longer matches**`connection.failed · dns_drift`
3. Day 43
   
   **Required records restored**`connection.verified · recovered`

### Start before procurement gets involved.

Every tier includes the hosted connect flow and ongoing monitoring. Paid plans add one-click setup on supported DNS providers and a white-label connect flow; beyond that, choose by monthly connections, applications, and API throughput.

| Plan | Monthly | Annual | Verified connections/month | Apps | API requests/minute | Included |
| --- | --- | --- | --- | --- | --- | --- |
| Free | $0 forever | n/a | 50 | 1 | 60 | 1 app; Guided manual DNS setup; DNS drift alerts by webhook; Connect flow shows “Powered by DoDomain”; Community support |
| Pro | $29 per month | $24/mo billed annually (2 months free) | 500 | 3 | 300 | Everything in Free; 3 apps; One-click DNS setup on supported providers like Cloudflare, guided setup everywhere else; White-label connect flow: your copy, font and success button; Priority email support |
| Scale | $99 per month | $82/mo billed annually (2 months free) | 2,500 | Unlimited | 1,200 | Everything in Pro; Unlimited apps; Top-priority support, answered first |

#### Enterprise: Custom volume

Need more than 2,500 verified connections a month, a dedicated rate limit, an invoice, or a DPA? Tell us your volume and we'll come back with a plan: no quote-only wall, no sales call unless you want one.

[Email us about volume](mailto:aladdin@devino.ca?subject=DoDomain%3A%20enterprise%20volume%20inquiry) [Use the contact form](https://app.dodomain.io/support?type=enterprise_inquiry)

Monthly verified-connection allowances come from the same plan definitions the application itself uses. No sales call is required for these self-serve tiers; the enterprise row above is for volume beyond them. [See how the quotas work](https://dodomain.io/pricing).

### What your team will ask before the first API call.

What does DoDomain do?

DoDomain gives SaaS products a hosted custom-domain setup flow. Your server creates a session with the domain and required DNS records; DoDomain guides or applies those records, verifies them against authoritative DNS, and notifies your server with a signed webhook.

Which DNS providers support one-click setup?

Cloudflare supports the live one-click OAuth path. Detected providers get a provider-specific guided setup with exact records, direct dashboard links, and live verification; unrecognized hosts get the universal guided fallback. DoDomain's Domain Connect templates are merged into the public registry, so a signed one-click apply is available wherever the user's DNS provider has enabled them.

Does DoDomain proxy traffic or issue SSL certificates?

No. DoDomain writes and verifies DNS; traffic goes directly to your infrastructure. TLS terminates at your host, such as Vercel, Cloudflare for SaaS, Render, Fly.io, Caddy, or nginx, so DoDomain is never in the request path.

Is there an SDK, or do I integrate over raw HTTP?

Both, and the SDKs are published. @dodomain/node is a typed server client (sessions.create, verifyWebhook); dodomain-sdk on PyPI is the Python equivalent, sync and async. On the browser side, @dodomain/connect embeds the hosted flow as a theme-matched sheet inside your own UI, and @dodomain/react wraps it in a useDoDomainConnect hook. The plain REST API and the hosted connect link stay fully supported; the SDKs are a convenience over the same shapes, not a requirement.

Can AI assistants connect domains through DoDomain?

Yes. DoDomain runs a remote MCP server at app.dodomain.io/api/mcp, so Claude and any other MCP client can check a domain's DNS provider, mint a connect session, and trigger verification. Clients sign in with OAuth 2.1 rather than a pasted key, you approve the scopes on a consent screen, and every tool calls the same /api/v1 endpoints your integration uses, so permissions and limits apply identically.

What happens if a connected domain's DNS changes later?

DoDomain re-checks every established connection automatically, every 10 minutes for a connection's first day, then hourly for a week, then every 6 hours. Suspected drift is re-checked within minutes and confirmed before you're alerted: the connection is marked broken and connection.failed is sent; when the records return, connection.verified fires with a recovery signal. Monitoring is included on every plan.

Is there a free plan, and can I cancel anytime?

Yes. The Free plan is free forever and includes the hosted connect flow with guided DNS setup, authoritative verification, and DNS drift monitoring, no card required. One-click setup and the white-label connect flow are part of Pro and Scale. Pro and Scale are billed monthly or annually; choosing annual billing gives you 2 months free. You can cancel a paid plan at any time from the subscription-management email.

### Read up on custom domains and DNS.

#### [Guides](https://dodomain.io/guides)

Long-form articles on building and running a custom-domain feature.

- [How to let customers use their own domain in your SaaS](https://dodomain.io/guides/let-customers-use-their-own-domain)
- [Cloudflare for SaaS custom hostnames: setup, step by step](https://dodomain.io/guides/cloudflare-for-saas-custom-hostnames-setup)
- [How long does DNS propagation take? The TTLs we measured](https://dodomain.io/guides/dns-propagation-times)

[All guides](https://dodomain.io/guides)

#### [DNS glossary](https://dodomain.io/glossary)

Plain-language definitions of the DNS terms behind custom domains.

- [Apex domain](https://dodomain.io/glossary/apex-domain)
- [CNAME record](https://dodomain.io/glossary/cname-record)
- [TXT record verification](https://dodomain.io/glossary/txt-record-verification)

[All glossary terms](https://dodomain.io/glossary)

### Take the DNS step out of your support queue.

Create the session. Let the user connect. Wait for the signed proof.

[Start with 50 free](https://app.dodomain.io/signin?mode=signup) [Read the docs](https://dodomain.io/docs) [Compare the alternatives](https://dodomain.io/compare) [Set it up with your coding agent](https://dodomain.io/agent-setup)
