# DoDomain > Custom domains for SaaS. Integrators call a REST API (or embed a widget) so their users can point custom domains at the integrator's product: DoDomain mints a connect session, applies DNS records one-click on Cloudflare or via Domain Connect where the provider has enabled it, guides manual setup everywhere else, verifies against authoritative DNS, then notifies the integrator with signed webhooks — and keeps re-verifying connected domains for free on every plan (DNS drift monitoring is never a metered add-on). DoDomain never proxies traffic or holds certificates; TLS terminates at the integrator's own host. Key facts: REST base URL https://app.dodomain.io · auth is `Authorization: Bearer dd_sk_…` (secret key, server-side only) · sessions expire after 24 hours (410 after expiry) · webhooks are HMAC-SHA256 signed (`x-dodomain-signature: t=,v1=` over `t.body`) with body `{"id", "type", "occurredAt", "data"}` (dedupe on `id`; a deprecated `event` alias of `type` is still sent) · the SDKs @dodomain/node and @dodomain/connect are published on npm (MIT, zero runtime dependencies), and plain HTTPS against the REST API stays fully supported. ## Machine-readable surfaces - [Full documentation as one Markdown file](https://dodomain.io/docs/llms-full.txt): every documentation page concatenated as Markdown, generated from the same MDX the docs site renders. - Markdown twin of every page on this host: append `.md` to any URL below — https://dodomain.io/compare/entri.md, https://dodomain.io/pricing.md, https://dodomain.io/tools/spf-checker.md. The home page's twin is https://dodomain.io/index.md. Each twin is generated at build time from the same source the HTML page renders, so it cannot go stale, and each HTML response advertises its twin with a `Link: <…>; rel="alternate"; type="text/markdown"` header. - [OpenAPI 3.1 description of /api/v1](https://dodomain.io/docs/openapi.json): generated from the same zod schemas the API validates requests with. Rendered reference: https://dodomain.io/docs/openapi. - [Agent setup instructions](https://dodomain.io/agent-setup/prompt.md): the Markdown a coding agent executes to set itself up for DoDomain (MCP server, SDK, credentials, verify). Paste "Fetch and execute the appropriate instructions to set me up for DoDomain from https://dodomain.io/agent-setup/prompt.md" into any AI coding agent, or read the per-agent guides at https://dodomain.io/agent-setup. - [FAQ](https://dodomain.io/docs/faq): the questions integrators ask most, each answered in a few sentences with a link to the full page. - Remote MCP server for AI assistants and agents: https://app.dodomain.io/api/mcp (Streamable HTTP, OAuth 2.1 + PKCE with automatic discovery and registration). Seven tools; included on every plan. Setup: https://dodomain.io/docs/connecting-ai-assistants. - [Sitemap](https://dodomain.io/sitemap.xml) · [robots.txt](https://dodomain.io/robots.txt) · [security.txt](https://dodomain.io/.well-known/security.txt) · IndexNow key file https://dodomain.io/eb92946a913fb330e391e4704dc3824f.txt. ## Docs - [Overview](https://dodomain.io/docs): What DoDomain is and how it adds custom-domain support to your SaaS in one flow. - [Apex domains](https://dodomain.io/docs/apex-domains): Why a CNAME cannot live at a zone apex, what DoDomain supports at the apex today, and the patterns that work when your infrastructure only speaks CNAME. - [REST API](https://dodomain.io/docs/api): The /api/v1 surface — authentication, endpoints, and rate limits. - [The connect flow](https://dodomain.io/docs/connect-flow): The hosted connect page, the embeddable widget, provider detection, and how each connect tier works. - [Connecting AI assistants](https://dodomain.io/docs/connecting-ai-assistants): DoDomain's remote MCP server — one URL, OAuth 2.1 sign-in, and seven scoped tools for checking domains and running connect sessions. - [FAQ](https://dodomain.io/docs/faq): The questions integrators ask most about DoDomain — providers, apex domains, SSL, SDKs, webhooks, monitoring, limits, testing and AI agents — each answered briefly with a link to the full page. - [Getting started](https://dodomain.io/docs/getting-started): From signup to a verified custom domain — create an app, mint a connect session, and receive the signed webhook. - [Custom domains for a multi-tenant Django app](https://dodomain.io/docs/guides/custom-domains-multi-tenant-django): Resolve the tenant from request.get_host() in Django 5 middleware, get ALLOWED_HOSTS right for domains you cannot list up front, mint the DNS records with the dodomain-sdk, verify the signed webhook in Python, and decide where TLS terminates on gunicorn behind Caddy or nginx. - [Custom domains for a multi-tenant Laravel app](https://dodomain.io/docs/guides/custom-domains-multi-tenant-laravel): Resolve the tenant from the request host in Laravel 12 middleware, keep trusted-host and CSRF checks from breaking customer domains, mint the DNS records with DoDomain through the Http client, verify the signed webhook in PHP, and decide where TLS terminates on Forge, Vapor or Octane. - [Custom domains in multi-tenant Next.js: proxy.ts to TLS](https://dodomain.io/docs/guides/custom-domains-multi-tenant-nextjs): Resolve the tenant from the Host header in a Next.js 16 proxy.ts, mint and verify the customer's DNS records, terminate TLS on Vercel, and settle the apex. - [Custom domains for a multi-tenant Rails app](https://dodomain.io/docs/guides/custom-domains-multi-tenant-rails): Resolve the tenant from request.host in Rails 8, keep host authorization from blocking customer domains, mint the DNS records with DoDomain over REST, verify the signed webhook in Ruby, and decide where TLS terminates on Puma behind Kamal or nginx. - [DNS provider setup guides](https://dodomain.io/docs/guides/dns-providers): How to add a CNAME, A or TXT record at 23 DNS providers — GoDaddy, Namecheap, Cloudflare, Squarespace, Wix, Hover, Porkbun and more — in each provider's own panel vocabulary, generated from the same source DoDomain's connect flow shows customers. - [Add a CNAME, A or TXT record at Bluehost](https://dodomain.io/docs/guides/dns-providers/bluehost): Where DNS records live at Bluehost, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Bluehost users. - [Add a CNAME, A or TXT record at Cloudflare](https://dodomain.io/docs/guides/dns-providers/cloudflare): Where DNS records live at Cloudflare, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Cloudflare users. - [Add a CNAME, A or TXT record at DigitalOcean](https://dodomain.io/docs/guides/dns-providers/digitalocean): Where DNS records live at DigitalOcean, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows DigitalOcean users. - [Add a CNAME, A or TXT record at DNSimple](https://dodomain.io/docs/guides/dns-providers/dnsimple): Where DNS records live at DNSimple, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows DNSimple users. - [Add a CNAME, A or TXT record at DreamHost](https://dodomain.io/docs/guides/dns-providers/dreamhost): Where DNS records live at DreamHost, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows DreamHost users. - [Add a CNAME, A or TXT record at Gandi](https://dodomain.io/docs/guides/dns-providers/gandi): Where DNS records live at Gandi, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Gandi users. - [Add a CNAME, A or TXT record at GoDaddy](https://dodomain.io/docs/guides/dns-providers/godaddy): Where DNS records live at GoDaddy, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows GoDaddy users. - [Add a CNAME, A or TXT record at HostGator](https://dodomain.io/docs/guides/dns-providers/hostgator): Where DNS records live at HostGator, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows HostGator users. - [Add a CNAME, A or TXT record at Hostinger](https://dodomain.io/docs/guides/dns-providers/hostinger): Where DNS records live at Hostinger, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Hostinger users. - [Add a CNAME, A or TXT record at Hover](https://dodomain.io/docs/guides/dns-providers/hover): Where DNS records live at Hover, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Hover users. - [Add a CNAME, A or TXT record at IONOS](https://dodomain.io/docs/guides/dns-providers/ionos): Where DNS records live at IONOS, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows IONOS users. - [Add a CNAME, A or TXT record at Namecheap](https://dodomain.io/docs/guides/dns-providers/namecheap): Where DNS records live at Namecheap, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Namecheap users. - [Add a CNAME, A or TXT record at Name.com](https://dodomain.io/docs/guides/dns-providers/namecom): Where DNS records live at Name.com, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Name.com users. - [Add a CNAME, A or TXT record at NameSilo](https://dodomain.io/docs/guides/dns-providers/namesilo): Where DNS records live at NameSilo, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows NameSilo users. - [Add a CNAME, A or TXT record at one.com](https://dodomain.io/docs/guides/dns-providers/onecom): Where DNS records live at one.com, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows one.com users. - [Add a CNAME, A or TXT record at OVHcloud](https://dodomain.io/docs/guides/dns-providers/ovh): Where DNS records live at OVHcloud, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows OVHcloud users. - [Add a CNAME, A or TXT record at Porkbun](https://dodomain.io/docs/guides/dns-providers/porkbun): Where DNS records live at Porkbun, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Porkbun users. - [Add a CNAME, A or TXT record at AWS Route 53](https://dodomain.io/docs/guides/dns-providers/route53): Where DNS records live at AWS Route 53, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows AWS Route 53 users. - [Add a CNAME, A or TXT record at Squarespace Domains](https://dodomain.io/docs/guides/dns-providers/squarespace): Where DNS records live at Squarespace Domains, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Squarespace Domains users. - [Add a CNAME, A or TXT record at STRATO](https://dodomain.io/docs/guides/dns-providers/strato): Where DNS records live at STRATO, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows STRATO users. - [Add a CNAME, A or TXT record at Vercel](https://dodomain.io/docs/guides/dns-providers/vercel): Where DNS records live at Vercel, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Vercel users. - [Add a CNAME, A or TXT record at Wix](https://dodomain.io/docs/guides/dns-providers/wix): Where DNS records live at Wix, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows Wix users. - [Add a CNAME, A or TXT record at WordPress.com](https://dodomain.io/docs/guides/dns-providers/wordpress): Where DNS records live at WordPress.com, what goes in the host field for a subdomain and for the root domain, and how to check the record is live — the same steps DoDomain's connect flow shows WordPress.com users. - [Domain Connect field notes: two providers end to end, every bug we hit](https://dodomain.io/docs/guides/domain-connect-field-notes): What it actually took to ship signed one-click DNS applies over Domain Connect — from the template registry to a real record on a real provider — including the spec's silence on parameter order, a provider's exponentiation bug, chunked public keys, and why a 200 on a template probe is not a working integration. - [Multi-record and email records](https://dodomain.io/docs/multi-record-and-email): Sessions that need more than one DNS record — CNAME plus ownership proof, apex A/AAAA, and SPF/DKIM/DMARC — what each connect path can do with them, and how verification treats email policies. - [@dodomain/node](https://dodomain.io/docs/node-sdk): The TypeScript server SDK — sessions, connections, apps, domains, webhook endpoints, key rotation, and the webhook verifier. - [OpenAPI spec](https://dodomain.io/docs/openapi): The machine-readable OpenAPI 3.1 description of the /api/v1 surface — generated from the same schemas the API validates with. - [Pricing](https://dodomain.io/docs/pricing): Free, Pro, and Scale — what each plan includes and how the quotas work. - [dodomain-sdk (Python)](https://dodomain.io/docs/python-sdk): The Python server SDK — sync and async twins over the same /api/v1 surface, typed models, an exception hierarchy, and the webhook verifier. - [@dodomain/react](https://dodomain.io/docs/react-sdk): The React bindings — a useDoDomainConnect hook (and a drop-in button) around the @dodomain/connect modal widget. - [SDKs](https://dodomain.io/docs/sdks): The four published DoDomain SDKs — @dodomain/node, @dodomain/connect and @dodomain/react on npm, dodomain-sdk on PyPI — and how to pick one. - [How SSL works](https://dodomain.io/docs/ssl): DNS points customer domains at your infrastructure — TLS terminates at your host, not ours. Certificate notes for Vercel, Cloudflare for SaaS, Caddy, nginx, Render, and Fly.io. - [Testing your integration](https://dodomain.io/docs/testing-your-integration): Drive the hosted connect flow from your own Playwright suite — the supported automation path, what needs real DNS, and how to assert the result without one. - [Webhooks and monitoring](https://dodomain.io/docs/webhooks): The HMAC signature scheme, the four webhook events, and the automatic DNS drift monitor built into every plan. - [Embed the connect flow](https://dodomain.io/docs/widget): Open the DoDomain connect flow inside your product — the showDoDomain widget (theme-matched, content-sized sheet with callbacks and postMessage events) or the zero-code hosted link. ## Site - [DoDomain — custom domains for SaaS](https://dodomain.io/): What the product is: a REST API, hosted flow and embeddable widget that get a customer's custom domain pointed at your product, verified against authoritative DNS, and monitored for drift. Markdown: https://dodomain.io/index.md - [Pricing](https://dodomain.io/pricing): The three published, self-serve plans with per-month verified-connection allowances, how the hard monthly cap behaves (402 quota_exceeded, no overage billing), and what counts as a connection. Markdown: https://dodomain.io/pricing.md - [Get the DoDomain app — Android, iPhone, Mac, Windows](https://dodomain.io/apps): Where to install the dashboard on a device: the Android app on Google Play, the browser install on iPhone, Mac and Windows while those store listings are in review, and the remote MCP server URL that lets Claude, Cursor or ChatGPT work in a DoDomain account. Markdown: https://dodomain.io/apps.md - [Changelog](https://dodomain.io/changelog): Dated, plain-language record of what shipped — new capabilities, SDK releases, protocol proofs, pricing changes. Markdown: https://dodomain.io/changelog.md - [Refer & Earn — the DoDomain partner program](https://dodomain.io/partners): How the Refer & Earn partner program works: you earn a commission on what everyone you refer pays DoDomain for their first year, when a commission clears the hold, the minimum before you can withdraw, and how to get your referral link. Markdown: https://dodomain.io/partners.md - [Entri alternative: DoDomain vs Entri](https://dodomain.io/compare/entri): Sourced head-to-head — DoDomain's free tier and per-month pricing against Entri's published $249/mo start, feature by feature, verification, free uncapped monitoring, and where Entri still wins. Markdown: https://dodomain.io/compare/entri.md - [customdomain.ai alternative: DoDomain vs customdomain.ai](https://dodomain.io/compare/customdomain-ai): Same-lane head-to-head — free connections per month vs per year, drift-check cadence, verified-not-just-applied DNS, and where customdomain.ai still wins. Markdown: https://dodomain.io/compare/customdomain-ai.md - [DoDomain vs Domainee](https://dodomain.io/compare/domainee): Domainee is a proxy whose customer adds the CNAME themselves; DoDomain writes and verifies that record in the customer's own provider and monitors it free. Which half each does, and how to pair them. Markdown: https://dodomain.io/compare/domainee.md - [DoDomain vs SaaSKevin](https://dodomain.io/compare/saaskevin): SaaSKevin proxies customer domains with automatic SSL; DoDomain is the DNS layer in front of it. Who does which half. Markdown: https://dodomain.io/compare/saaskevin.md - [DoDomain vs SaaS Custom Domains](https://dodomain.io/compare/saas-custom-domains): SaaS Custom Domains is a proxy platform; DoDomain gets the DNS written in the customer's provider, verifies it, monitors it free. Who does which half. Markdown: https://dodomain.io/compare/saas-custom-domains.md - [DoDomain with Cloudflare for SaaS](https://dodomain.io/compare/cloudflare-for-saas): Complement, not alternative — Cloudflare for SaaS terminates traffic on customer hostnames, DoDomain gets the DNS records created and verified first. Covers the seam between them. Markdown: https://dodomain.io/compare/cloudflare-for-saas.md - [DoDomain with Approximated](https://dodomain.io/compare/approximated): The same complement framing for a dedicated proxy — who does which half, how the two meters differ, and how to wire them together. Markdown: https://dodomain.io/compare/approximated.md - [Free domain tools](https://dodomain.io/tools): Index of the free, no-signup domain tools: DNS provider detector, DNS propagation checker, SPF record checker. Markdown: https://dodomain.io/tools.md - [DNS provider detector](https://dodomain.io/tools/provider-detector): Which DNS host serves a domain, read from its authoritative nameservers, and whether one-click (Cloudflare or Domain Connect) setup is available there. Markdown: https://dodomain.io/tools/provider-detector.md - [DNS propagation checker](https://dodomain.io/tools/dns-lookup): One record read from the authoritative nameservers and three public resolvers side by side, so a disagreement is visible rather than guessed at. Markdown: https://dodomain.io/tools/dns-lookup.md - [SPF record checker](https://dodomain.io/tools/spf-checker): Parses a domain's SPF record, walks every include and redirect, and counts DNS lookups against the limit of ten, with a severity on every finding. Markdown: https://dodomain.io/tools/spf-checker.md - [The state of Domain Connect](https://dodomain.io/state-of-domain-connect): Nightly-measured primary data on which DNS providers actually serve Domain Connect templates today — the evidence behind every one-click coverage claim on this site. Markdown: https://dodomain.io/state-of-domain-connect.md - [Onboard your AI coding agent to DoDomain](https://dodomain.io/agent-setup): One sentence to paste into Claude Code, Codex, Cursor, OpenCode or GitHub Copilot: the agent fetches https://dodomain.io/agent-setup/prompt.md and connects itself to the DoDomain MCP server, installs the SDK and verifies the setup. Per-agent commands for doing it by hand. Markdown: https://dodomain.io/agent-setup.md - [Set up DoDomain in Claude Code](https://dodomain.io/agent-setup/claude-code): The exact Claude Code command or config for DoDomain's remote MCP server (OAuth sign-in, no API key), how to trigger the sign-in, the SDK install, and the verify step. Markdown: https://dodomain.io/agent-setup/claude-code.md - [Set up DoDomain in Codex](https://dodomain.io/agent-setup/codex): The exact Codex command or config for DoDomain's remote MCP server (OAuth sign-in, no API key), how to trigger the sign-in, the SDK install, and the verify step. Markdown: https://dodomain.io/agent-setup/codex.md - [Set up DoDomain in Cursor](https://dodomain.io/agent-setup/cursor): The exact Cursor command or config for DoDomain's remote MCP server (OAuth sign-in, no API key), how to trigger the sign-in, the SDK install, and the verify step. Markdown: https://dodomain.io/agent-setup/cursor.md - [Set up DoDomain in OpenCode](https://dodomain.io/agent-setup/opencode): The exact OpenCode command or config for DoDomain's remote MCP server (OAuth sign-in, no API key), how to trigger the sign-in, the SDK install, and the verify step. Markdown: https://dodomain.io/agent-setup/opencode.md - [Set up DoDomain in GitHub Copilot (VS Code)](https://dodomain.io/agent-setup/vscode): The exact GitHub Copilot (VS Code) command or config for DoDomain's remote MCP server (OAuth sign-in, no API key), how to trigger the sign-in, the SDK install, and the verify step. Markdown: https://dodomain.io/agent-setup/vscode.md - [Terms of Service](https://dodomain.io/terms): The terms governing the API, widget, hosted flow and dashboard. Markdown: https://dodomain.io/terms.md - [Privacy Policy](https://dodomain.io/privacy): What data DoDomain processes, why, and for how long. Markdown: https://dodomain.io/privacy.md ## App - [Dashboard](https://app.dodomain.io/signin): Create apps, copy API keys, manage webhook endpoints, read delivery logs.