CustomDomain Docs

User journeys

Map every user-facing CustomDomain™ flow to the surface that implements it: widget for end customers, console and API for developers, and MCP for AI agents.

The completeness map: every user-facing flow and the surface that implements it.

Personas

  • Developer / operator: integrates the product, works in the console and via the API.
  • End customer: the SaaS's customer connecting their own domain, works in the widget.
  • Platform operator: runs and monitors the stack.

End-customer journeys (widget)

#As a customer, I want to…Surface / path
C1Enter my domain and have its DNS provider detectedWidget → Domain analysis (POST /v1/domains:check)
C2Connect automatically when possibleWidget → sign in with the provider (oauth:start → callback), one-click setup (domainconnect:start) or secure sign-in (browser:start)
C3Get exact records to add when manualWidget → Manual config from GET /v1/connections/{id}/records (copy buttons)
C4Enter a scoped provider credential to auto-writeNot in the widget, which asks for no key; the console and the API take an API key (POST /v1/connections/{id}/apply)
C5See progress until my domain is liveWidget → In progress (polls status) → Success
C6Recover from errors / switch to manualWidget → Error screen (retry / switch)
C7Not lose my place accidentallyWidget → exit-confirm + session-expired overlays
C8Forward my setup to a colleague to finishWidget → Share (loadSharedFlow, POST /v1/sharing/connect → GET /share/{token})
C9Buy a new domain from within the widgetWidget → Buy (purchaseDomain, POST /v1/registrar/checkout → /fulfill)

Developer journeys (console + API)

#As a developer, I want to…Surface / path
D1Create and manage applicationsConsole → Applications and each application's page (POST/GET /v1/applications, GET/PATCH/DELETE /v1/applications/{id}, its keys and connect target)
D2Create, list, and revoke API keysConsole → API & SDK → API keys (POST/GET/DELETE /v1/applications/{id}/keys)
D3Invite teammates and set rolesConsole → Team (POST /v1/members, PATCH /v1/members/{id}, :accept)
D4Connect a domain from the consoleConsole → Domains (POST /v1/connections)
D5Inspect a connection and drive itConsole → Domain detail, for a domain of any application (GET /v1/connections/{id}, /records, the apply rails, all with the tenant API key)
D6See which providers auto-configureDNS providers in these docs, or the public GET /v1/providers and /v1/providers/census (the console has no providers page; each domain's detected provider shows on Domains)
D7Receive events and inspect deliveriesConsole → API & SDK → Webhooks to register and delete endpoints, and Activity for the timeline of deliveries (POST/GET/DELETE /v1/webhooks, GET /v1/webhook-deliveries)
D8Track usage against quotaConsole → Usage (GET /v1/billing/usage)
D9View and change planConsole → Billing (GET /v1/plans, POST /v1/billing/checkout, /portal)
D10Embed the widget safelyConsole → Widget (Install, Design, Try it live). Your server mints the token: POST /api/widget-token with an API key (console applications) or POST /v1/tokens with the client secret (applications created over the API). The widget JWT is app- (and optionally domain-) scoped
D11Buy a new domain, money-safeConsole → More → Buy a domain (/app/sell: search → in-page checkout authorizes → registration → capture; auto-connected)
D12Resume an abandoned setupConsole → Domains → Finish setup (reopens the guided flow at the right step)
D13Point an agent at the MCP serverConsole → More → MCP server (/app/mcp: endpoint, client setup for Claude Code, Claude Desktop, Codex, Cursor, VS Code, ChatGPT and others, a connection test). Switch it on under Settings → Features
D14Review and revoke what agents may doConsole → More → Agents (/app/settings/agents: each grant's agent, application, last use and scopes, with Revoke). It switches on after your first approval on the consent page (/agent/consent)

AI-agent journeys (MCP)

An agent drives domains through the MCP server, hosted at https://mcp.customdomain.ai/mcp, which wraps the same /v1 API with twenty-three tools. A person approves what the agent may do first: see Agent access.

#As an agent, I want to…Tool
M1Check if a domain is available and pricedsearch-domain-availability
M2Suggest available domains from keywordsgenerate-domain-suggestions
M3Register a domain (fail closed behind an authz callback; off on the hosted service)create-domain-order → check-order-status
M4Connect a domain the user already ownsconnect-domain → check-connection-status
M5See how a domain can be configured before actingdiscover-provider
M6Forward a domain to another URL (301)forward-domain → check-connection-status
M7Set up email (MX/SPF/DKIM/DMARC) for a domainadd-email → check-connection-status
M8Re-apply a managed connection, or take any connection down (the person confirms the domain first, and the grant needs domains:disconnect)reapply-connection / disconnect-domain
M9See every connected domain and its status (page by page when the list is cut)list-connections
M10Check a domain's HTTPS certificatecheck-certificate-status
M11Find out why a domain is not live, then re-run the check after the fixdiagnose-connection → recheck-connection → check-connection-status
M12Find out whether the workspace may connect new domainscheck-billing-status
M13List the domain purchaseslist-domain-orders
M14Move a domain's nameservers to the application's DNS host, follow the move, and move them back (the person confirms first)migrate-nameservers → check-nameserver-status / rollback-nameservers
M15Use a key the workspace already keeps instead of starting a new sign-in (the person confirms first, and the grant needs domains:connect)list-provider-accounts / find-saved-access → use-saved-access → check-connection-status

Platform-operator journeys

#As an operator, I want to…Surface / path
O2Serve HTTPS for live domains automaticallyEdge on-demand TLS gated by ask
O3Provision tenants for signupsPOST /v1/tenants:provision (provision secret)
O4Keep tenants isolatedTenant-scoped handlers; cross-tenant → 404
O5Keep secrets safeHashed keys, provider credentials used once or kept encrypted, sealed console key, no key material in logs

Coverage note

The setup_type values automatic and manual (plus the sign-in, one-click setup and secure sign-in rails, and DNS hosting where the application offers it) are the paths the widget drives today, and the API key way belongs to the console and the API; async additionally powers managed connections, and mcp covers agent-driven setup through the MCP server. A connection can be disconnected with DELETE /v1/connections/{id} (reverting a managed template first); see Offboarding.

On this page