Connection paths by provider
How CustomDomain™ picks the way in for each domain: provider sign-in, one-click setup, secure sign-in, an API key, records added by hand or DNS hosting.
When a customer enters a domain, we look up its nameservers to see who hosts its DNS, then offer the easiest way in that works at that provider. There are six ways to connect, and the first five are offered in this order:
- Sign in with the provider (OAuth) or approve access at the provider: one click and nothing to paste. Whether the sign-in is kept afterwards depends on the provider (see below).
- One-click setup (Domain Connect): the provider applies our signed template after the customer approves it on the provider's site, then sends the customer back.
- Secure sign-in: for a provider that offers no sign-in a third party can use. The customer signs in to the provider in a temporary browser, and where the provider allows it our software makes a lasting API key there; otherwise it edits the provider's DNS page for that one domain. A change that only adds records goes ahead by itself; one that replaces or removes a record waits for the customer's approval. Offered to selected workspaces for now (see With secure sign-in).
- An API key: the customer creates a scoped credential at the provider and pastes it; we write the records for them. At Amazon Route 53 an access role comes first: the customer lets our AWS account change the zone, with no secret to paste.
- Add the records: the exact rows to copy, with provider-specific steps and a link to the provider's DNS page. This works at every provider.
The sixth, DNS hosting, is offered beside these rather than after them: the domain's owner changes its nameservers once, where the domain was bought, and CustomDomain™ hosts the zone and writes every record. Your customers are offered it only when your application turns it on. See Managed DNS.
CustomDomain™ knows more than 200 DNS hosts, registrars and domain platforms,
among them every one of the 100 largest registrars (by domains under
management in ICANN's registry reports for May 2026), and names most of them
from the domain's nameservers. Knowing a provider is not the same as writing
its records: most registrars give no third party a way to change DNS, so for
them adding the records, with that provider's own steps (or a secure sign-in where
one is offered), is the way in. The tables
below are what the hosted service offers as of 2026-10-09. On 2026-10-31 the
census lists 217: 73 have an automatic path (6 provider OAuth, 1 Domain
Connect, 66 scoped API key) and the other 144 are connected by hand. The
adapters are a separate count: GET /v1/providers lists 77, and every one of
them belongs to a provider the census lists.
The console and the widget read the same verdict from
POST /v1/domains:check (its rails block and recommended_rail), so they
never disagree about what to show. GET /v1/providers lists every adapter and
GET /v1/providers/census routes every known provider to its mode.
Root domains (acme.com rather than www.acme.com) depend on what the provider
can hold at the zone apex; see Root domains. For
records only you know (SES DKIM, a verification TXT), see
Bring your own records.
One click, nothing to paste
| Provider | How it connects | Notes |
|---|---|---|
| Cloudflare | Sign in with Cloudflare | A root CNAME is fine: Cloudflare flattens it. |
| DigitalOcean, DNSimple, Linode (Akamai Cloud), Netlify, WordPress.com | Sign in with the provider | Netlify writes need the domain on Netlify DNS. |
| Azure DNS | Sign in with Azure DNS | Use a Microsoft account that can edit the domain's public zone; we find the subscription and resource group that hold it. Users in other organizations see an unverified publisher warning, and an organization that limits user consent needs an admin to approve the app. A subscription ID, a resource group and an access token work too. |
| Google Cloud DNS | Sign in with Google Cloud | Use the Google account that can edit the domain's public Cloud DNS zone; we find the Google Cloud project that holds it. Until Google finishes reviewing the app, Google may show a notice that it has not verified the app yet. A project ID and an access token work too. |
| Vercel | Install CustomDomain™ on Vercel | The sign-in is our Vercel integration: install it on the Vercel team that owns the domain. |
| Porkbun | Approve access at Porkbun | Porkbun adds an API key named for CustomDomain™ to the account. Porkbun only lets the API change domains that have API Access turned on. |
| Dynadot, Unstoppable Domains | Sign in with the provider, through the provider's own MCP server | Dynadot lets you sign in only once MCP is on: in Dynadot, open Tools, API, click Unlock your account and switch MCP Enabled on. Dynadot also connects with an API key. |
| NameSilo, Glauca Digital, Domain Chief | One-click setup (Domain Connect) | These providers serve our templates. |
| Amazon Route 53 | Access role (recommended) | Create a role in your AWS account that lets us change this zone; nothing secret to paste. An IAM access key works too. |
On the hosted service, a sign-in or approval at Cloudflare, DigitalOcean, DNSimple, Linode, Netlify, Porkbun, Vercel or WordPress.com is kept by default as an encrypted grant, so we can put the records back later and remove them when the domain is disconnected, without asking again. In the console, untick Keep this sign-in to use it once instead; the widget tells the customer the permission is kept. Every other sign-in (Azure DNS, Dynadot and Unstoppable Domains) is used once to write the records and then dropped, which means we cannot repair those records later without asking again. See Managed connections.
Built, but not switched on yet
These sign-ins exist in the product but are not offered on the hosted service today, so none of them appears in the console or the widget:
- Grant access at OVHcloud: a consent page limited to the domain's zone, which needs an OVHcloud application for each region a deployment serves. The hosted service has none, so OVHcloud connects with an application key.
- Sign in through the provider's MCP server (Hostinger, Namecheap, Spaceship, XServer Domain and Muumuu Domain): the provider's own MCP server signs the customer in and its DNS tools write the records. Each one is switched on only after the provider approves CustomDomain™ and a live test passes. Until then Hostinger, Namecheap and Spaceship connect with an API key (Namecheap only for accounts that qualify), and XServer Domain and Muumuu Domain take the records by hand.
Speaks one-click setup, but has not onboarded our templates
GoDaddy, IONOS, Aruba and Squarespace answer Domain Connect discovery but have not onboarded our templates, so the console does not offer a one-click button that would end on the provider's error page. Cloudflare and Vercel answer too and serve none of our templates, and WordPress.com has not onboarded them either; for those three, the sign-in is the one-click path. Until each provider onboards the templates, GoDaddy and IONOS connect with secure sign-in, where it is offered, or an API key; Squarespace connects with secure sign-in, where it is offered, or by hand; and Aruba takes the records by hand.
With secure sign-in
Secure sign-in is for providers that offer no sign-in a third party can use. The
hosted service has it on at eight of them, for the workspaces it is switched on
for: Namecheap, GoDaddy, IONOS, Name.com, Squarespace, Hover, Spaceship and
Hostinger. At six of them it also makes a lasting API key on the provider's own API
page (Namecheap, GoDaddy, Name.com, Spaceship, Hostinger, and IONOS's US site), and
the domain is then connected through the provider's API like any other key. At the
others, and wherever no key can be made, our software edits the provider's DNS page
for that one domain once the customer approves the changes. Network Solutions and
Wix are not offered yet. POST /v1/domains:check says per domain whether it runs
(rails.cloud_browser), and where it makes a key, rails.cloud_browser.key says
what the key can do beyond DNS (rights) and when it ends. See Secure sign-in, and
GoDaddy and
Namecheap for those two.
With an API key
The console asks for each part as its own labeled field, links the page where the credential is created, and lists the steps; see Provider setup for every provider's steps.
| Provider | What you create | Before you start |
|---|---|---|
| GoDaddy | Personal Access Token with domains.domain:read and domains.dns:update | Any account that holds a domain can create one. One-click setup is waiting on GoDaddy's onboarding. Secure sign-in makes the token for you, where it is offered. |
| Namecheap | API key (and your username) | Only accounts with 20 or more domains, a $50 balance, or $50 spent in the last 2 years; whitelist 100.48.24.176. Not for domains on Namecheap hosting DNS. Secure sign-in turns the API on for you, where it is offered. |
| Amazon Route 53 | IAM access key (plus the session token for temporary ASIA keys) | The access role above is the recommended alternative. |
| Alibaba Cloud DNS | RAM AccessKey ID and secret (plus an STS security token for temporary credentials) | The domain must already be a zone in Alibaba Cloud DNS. |
| 101domain | API key with the DNS read and DNS write scopes | Only the account's primary user can make one. The domain must use 101domain's nameservers. |
| ALL-INKL.COM | KAS login and password (plus the one-time code with two-factor login) | Used once and never stored. |
| Arsys | Hosting domain and DNS API password | Activate the DNS API in the Panel de Control. Used once and never stored. |
| Azure DNS | Subscription ID, resource group and an access token | Tokens expire within about an hour, so they are used once. Sign in with Azure DNS is the easier way in. |
| Azion | Personal Token | The token needs access to Edge DNS, and the domain must already be a zone in your Azion account. |
| Binary Lane | API token | A token can manage your whole account, so it is used once and never stored; delete it in mPanel afterwards. The domain must use Binary Lane's nameservers. |
| Bunny DNS | Account API key | |
| ClouDNS | API user (or API sub-user) and password | API access comes with ClouDNS's paid plans. |
| Combell | API key and secret (a combell.nl account chooses its own site) | The API comes with Reseller Hosting. Allow 100.48.24.176 under IP restrictions. The domain must use Combell's nameservers. |
| Constellix | API key and secret key | |
| cPanel hosts | cPanel username, API token and server hostname | For hosts that run cPanel; we connect on port 2083. |
| deSEC | API token | |
| DigitalOcean | Personal access token with the domain scopes | Or sign in with DigitalOcean. |
| DirectAdmin hosts | DirectAdmin username, Login Key and server hostname | For hosts that run DirectAdmin; we connect on port 2222 (or 443 when you add :443 after the hostname). The server must be reachable from 100.48.24.176 and use a certificate a browser trusts. You choose it yourself, since nothing detects DirectAdmin from nameservers. |
| DNSimple | Account API access token | Or sign in with DNSimple. |
| DNS Made Easy | API key and secret key | |
| Domeneshop | API token and its secret | The domain must use Domeneshop's DNS service (ns1 to ns3.hyp.net). |
| DreamHost | API key with the dns-* functions | |
| Dynadot | Production API key and its API secret | Whitelist 100.48.24.176 in Dynadot's API settings. With the key alone, records can only be added, not changed or removed. Or sign in with Dynadot. |
| easyDNS | REST API token and key | |
| Epik | API signature | Allow 100.48.24.176 in Epik's API settings. |
| Exoscale | IAM API key and secret, from a role that allows only the DNS service | The domain must already be added under DNS. You choose it yourself: its zones use DNSimple's nameservers, so a domain there is detected as DNSimple. |
| Gandi | Personal access token with "Manage domain name technical configurations" | |
| Gcore | Permanent API token | The token can change every zone in your account. The domain must use Gcore's nameservers. |
| GleSYS | API key with Domain access, and the project ID | |
| Google Cloud DNS | Sign in with Google Cloud, or a project ID and an access token | The sign-in finds the project that holds the zone. Tokens expire within an hour, so they are used once. |
| Hetzner | Hetzner Console project API token (Read & Write) | Tokens from the old DNS Console no longer work. |
| hosting.de | API key with Display and Edit under DNS Service, Zones | The domain's DNS zone must be at hosting.de. |
| Hostinger | hPanel API token | |
| Huawei Cloud DNS | IAM Access Key ID and Secret Access Key | Use a sub user's key with only DNS record permissions. |
| Infomaniak | API token with dns:read and dns:write | The zone must be at Infomaniak. The API allows 60 requests a minute. |
| Internet.bs | API key and API password | Allow 100.48.24.176 under API allowed IP address(es). |
| INWX | Username and password of a sub account with only the DNS role | No Mobile TAN. Used once and never stored. |
| IONOS | API key (public prefix and secret) | |
| Joker.com | DMAPI API key from a free Joker.com reseller account | The domain must be in that account and use Joker.com's own nameservers. A write replaces the whole zone, so a zone with a record type the API cannot write back is refused. |
| Linode | Personal access token with Domains read/write | Or sign in with Linode. |
| Loopia | API user and password | Needs LoopiaDNS or web hosting. Used once and never stored. |
| LuaDNS | API key and account email | Turn on API access first. |
| Metaname | Account reference and API key | The key can change every zone in the account. The domain must use Metaname's own nameservers. |
| Moniker | API key and password | API access is activated by Moniker support; give it 100.48.24.176 when you request the key. |
| Mythic Beasts | API key ID and secret | The domain must use Mythic Beasts DNS (ns1 and ns2.mythic-beasts.com). |
| Name.com | API token and username | With two-step verification on, also switch on Name.com API Access. |
| NameBright | API application (account, application name, secret) | NameBright grants API access on request; whitelist 100.48.24.176 on the application. |
| NameSilo | API key | Or use one-click setup. |
| netcup | API key alone for CloudDNS, or the customer number, a Legacy API key and the API password for the classic nameservers | The domain must use netcup's own nameservers. |
| Netlify | Personal access token | Or sign in with Netlify. |
| Njalla | API token | |
| NS1 | API key secret with the DNS permission Manage zones | The domain must be a primary zone of the account. If the account or the key has an IP allow list, include 100.48.24.176. |
| Openprovider | API token from /v1beta/auth/login | API access must be enabled for the user; tokens last 48 hours, so they are used once. |
| OVHcloud | Application key, application secret and consumer key (Europe, Canada or United States) | Grant access at OVHcloud works only where a deployment has registered OVHcloud applications; the hosted service has not. |
| Plesk hosts | Plesk username, password and server hostname | For hosts that run Plesk; we connect on port 8443 (or 443 when you add :443 after the hostname). The server must be reachable from 100.48.24.176 and serve a trusted certificate. Used once and never stored. You choose it yourself, since nothing detects Plesk from nameservers. |
| Porkbun | API key and secret key | Turn on API Access for the domain. Or approve access at Porkbun. |
| Scaleway | Secret key of an IAM API key | Needs the permission set DomainsDNSFullAccess on the Project that holds the domain. |
| Simply.com | API key and account number | |
| Spaceship | API key and secret with the DNS record scopes | |
| Subreg.cz | Subreg login and password | Used once and never stored. Allow 100.48.24.176 if Subreg refuses the address. |
| Tencent Cloud DNSPod | Tencent Cloud API key (SecretId and SecretKey), ideally from a CAM sub-user allowed only the DNSPod record actions | Choose the China or International site the account is on. Records are written on the Default line; other lines are left alone. |
| TransIP | Access token | Switch off the token's whitelisted IP option, or whitelist 100.48.24.176. |
| united-domains | DNS API key | Needs the DNS API add-on. |
| Vercel | Access token | Or install CustomDomain™ on Vercel. |
| Vultr | API key | Add 100.48.24.176/32 under Access Control. |
| webnames.ca | API user and API key | Needs the Domain and Account Management Toolkit add-on and DNS Hosting. Writes only A, AAAA, CNAME and TXT records. |
| Websupport | API key and secret | The key can change every domain in the account, so make one just for this. |
| WEDOS | Account email and a separate WAPI password | WAPI must be turned on with 100.48.24.176 allowed in the client panel. |
| Wix | Account level API key and the Account ID | Only the account owner can make the key. The domain must be registered at Wix or connected to a Wix site by nameservers. |
| Zone.ee | ZoneID username and API key | The key can change every zone in the account, so make one just for this. |
100.48.24.176 is the address the hosted service's DNS writes come from
(the control plane's CONNECT_CLIENT_IP).
Plesk, DirectAdmin and Exoscale are chosen by the customer, and nothing detects them from a domain's nameservers. Plesk and DirectAdmin run on a hosting company's own servers, which carry that company's nameservers, the same as cPanel hosts; an Exoscale DNS zone uses DNSimple's nameservers, so a domain there is detected as DNSimple.
The census also lists PowerDNS as an API key provider. PowerDNS is software people run on their own servers, and the hosted service has no way to be told where a customer's server is, so it is not a provider the hosted service can write to. Of the 77 adapters, the hosted service writes records through 74: the other three are PowerDNS and the two sign-ins through a provider's MCP server (XServer Domain, Muumuu Domain) that are built but switched off. Since 2026-10-21 the census also lists the eleven providers with an adapter that it used to leave out: Azure DNS, Bunny DNS, Constellix, deSEC, DNS Made Easy, GleSYS, Akamai Cloud (Linode), LuaDNS, Njalla, PowerDNS and Vultr, each as an API key provider.
Using a provider token through the API
The BYO-token rail writes a connection's records with the customer's own credential:
curl -X POST https://api.customdomain.ai/v1/connections/<ID>/apply \
-H "Authorization: Bearer <WIDGET_JWT>" \
-H "Content-Type: application/json" \
-d '{
"provider": "cloudflare",
"credential": { "token": "<scoped-provider-token>" }
}'credential.token carries every part of the credential in one string. The
console builds it from the separate fields; through the API you send it
yourself:
provider | credential.token |
|---|---|
godaddy | the Personal Access Token (a classic key:secret pair still works) |
namecheap | apiUser:apiKey, optionally :userName and :clientIp |
route53 | accessKeyId:secretAccessKey, plus :sessionToken for temporary keys |
alidns | accessKeyId:accessKeySecret, plus :securityToken for STS credentials |
allinkl | login:password, plus :otp with two-factor login |
arsys | hostingDomain:apiPassword |
azuredns | subscriptionId:resourceGroup:accessToken |
cloudns | authId:password, sub:subAuthId:password or subuser:subAuthUser:password |
combell | apiKey:apiSecret, prefixed with nl: for a combell.nl account |
constellix, dnsmadeeasy, spaceship | apiKey:secret |
cpanel, o2switch | user:token:host |
directadmin | user:loginKey:host (the host may carry a port, 2222 or 443) |
dnspod | secretId:secretKey, prefixed with intl: for a Tencent Cloud International account |
domeneshop | token:secret (the secret may contain colons) |
dynadot | apiKey:apiSecret (the key alone still adds records, but cannot change or remove them) |
easydns | token:key |
exoscale | apiKey:apiSecret |
gcpdns | projectId:accessToken |
glesys | projectId:apiKey |
huaweicloud | accessKeyId:secretAccessKey |
internetbs | apiKey:apiPassword |
inwx | username:password (the password may contain colons) |
ionos, uniteddomains | publicPrefix.secret (one key, prefix and secret joined by a dot) |
loopia | apiUser:apiPassword (the API user ends in @loopiaapi; the password may contain colons) |
luadns | email:apiKey |
metaname | accountRef:apiKey (split on the first colon, so the key may contain colons) |
moniker | apiKey:password |
mythicbeasts | keyId:secret (split on the first colon, so the secret may contain colons) |
namebright | account:appName:secret |
namecom | username:token |
netcup | customerNumber:apiKey:apiPassword on the classic nameservers (the password may contain colons), or the API key alone on CloudDNS |
ovh | appKey:appSecret:consumerKey, prefixed with ca: or us: outside Europe |
plesk | login:password:host (the password may contain colons; the host may carry a port, 8443 or 443) |
porkbun | apiKey:secretApiKey |
simply | accountNumber:apiKey |
subreg | login:password (an admin account uses ADMIN#LOGIN; the password may contain colons) |
webnamesca | apiUser:apiKey (split on the first colon, so the key may contain colons) |
websupport | apiKey:secret (split on the first colon, so the secret may contain colons) |
wedos | login:wapiPassword |
wix | apiKey:accountId |
zoneee | username:apiKey |
| every other provider | the single token or key |
By hand, with provider-specific steps
Every provider can be connected by adding the records the console shows, with a link to the provider's DNS page where we know it. For 135 providers and platforms the widget also shows that provider's own steps (where the DNS page is, what the Name field wants for the root, and the pitfalls): 123 Reg, Akamai Cloud (Linode), Alibaba Cloud DNS, ALL-INKL.COM, Amazon Route 53, Arsys, Aruba.it, Atak Domain, Azure DNS, BigCommerce, BigRock, Bluehost, Bolt (bolt.new), Bunny DNS, Canva, Cloudflare, ClouDNS, Constellix, Cosmotown, cPanel, Crazy Domains, deSEC, DigitalOcean, Directnic, DNSimple, DNS Made Easy, Domain Chief, Domain.com, DomainDiscount24, DonDominio, DreamHost, Dynadot, easyDNS, Elementor, eName, Enom, Epik, Fasthosts, Fastmail, FatCow, Freename, Gabia, Gandi, Glauca Digital, GleSYS, Gname, GoDaddy, Google Cloud DNS, GreenGeeks, Hetzner, HighLevel (LeadConnector), home.pl, HostGator, Hosting.com, Hostinger, Hostpoint, Hover, Infomaniak, InMotion Hosting, Internet.bs, IONOS, iPage, isimtescil.net, iwantmyname, Jimdo, Joker.com, Juming, Just Host, Kajabi, Locaweb, Lovable, LuaDNS, METUnic, Microsoft 365, Mijndomein, Moniker, Name.com, NameBright, Namecheap, NameMart, NameSilo, Namify, Natro, Netlify, Network Solutions, NiceNIC, Njalla, Now.cn, o2switch, Odoo Online, Onamae.com, one.com, Openprovider, OpenSRS, OVHcloud, Papaki, Porkbun, PowerDNS, REG.RU, Register.com, Register.it, Registro.br, ResellerClub, RU-CENTER, Sav.com, Shopify, Simply.com, SITE123, SiteGround, Spaceship, Square Online (Weebly), Squarespace Domains, STRATO, Strikingly, Subreg.cz, Tencent Cloud DNSPod, TransIP, Tumblr, Turbify (formerly Yahoo Small Business), Turkticaret.Net, united-domains, Unstoppable Domains, Vercel, Vultr, Web.com, Webcentral, Webnode, West.cn, Wix, WordPress.com, World4You, Xinnet, xneelo, Yola and Yuqu. Any other provider gets the same records with general steps.
Wholesale, corporate and drop-catch registrars rarely give the end customer a
DNS panel of their own. Their entries in GET /v1/providers/census say who
edits the records instead: the reseller that sold the domain, the company's
domain administrator, or NameBright for a domain won at DropCatch.
Domains bought through a site builder or shop
Site builders, shops and email suites often sell the domain inside their own product, and then the records go in on that product's DNS screen. Twenty platforms where people buy or keep a domain (mostly those, plus DomainDiscount24 and Just Host) are recognized with their own steps:
- With nameservers of their own, named from the nameservers: Microsoft 365, Fastmail, Turbify, SITE123, BigCommerce, Jimdo and DomainDiscount24 (which registers domains bought when signing up for Google Workspace), plus Just Host, whose zones are named Bluehost because Just Host now sends its customers there.
- On another provider's nameservers, offered in the widget's provider list with their steps: Canva, Strikingly, Webnode, Lovable, Bolt, HighLevel, Kajabi, Elementor, Tumblr, Square Online, Yola and Odoo Online.
Where a platform keeps its domains on another provider's nameservers, detection would name that provider, whose sign-in or API key cannot reach a zone held in the platform's account. So when the root also points at an address only that platform hands out, detection names the platform instead and shows its steps: a Shopify store on Google Cloud DNS's nameservers, a Tumblr domain on WordPress.com's, and a Canva domain on OpenSRS's shared DNS. The domain is then connected by adding the records in the platform's own settings.
Where keys are kept
Sign-ins and one-click setup store nothing unless the connection is managed. On the hosted service a sign-in at Cloudflare, DigitalOcean, DNSimple, Linode, Netlify, Porkbun, Vercel or WordPress.com is kept that way by default (in the console, untick Keep this sign-in to use it once). An API key is used for the write and kept only when the customer leaves Remember this key ticked in the console (through the API, only when it is connected as a provider account). A kept key or sign-in is encrypted with AES-256-GCM, used only server-side, and revocable any time on the console's Connected accounts page. Account passwords, short-lived tokens and tokens that cannot be limited to DNS (ALL-INKL.COM, Arsys, Binary Lane, Google Cloud DNS, Azure DNS, INWX, Loopia, Openprovider, Plesk, Subreg) are never kept. See Remembering a key.
One-click setup (Rail A)
One-click setup uses the provider-hosted Domain Connect protocol and is
redirect-based: the customer is sent to their provider, which applies a signed
template and returns. There is no server-to-server token. Discovery is via
TXT _domainconnect.<domain> and the provider's settings endpoint. Both the
synchronous redirect and the asynchronous variant are supported
(POST /v1/connections/{id}/domainconnect:start). The button is only offered
for providers that serve our templates.
Every template we publish names our return domains (syncRedirectDomain:
api.customdomain.ai, app.customdomain.ai and customdomain.ai), since
version 2 of the templates was merged into the public Domain Connect template
repository on 2026-09-29. So a synchronous apply always carries a signed
return link: after the customer approves (or cancels) at the provider, the
provider sends the browser back to us, the window closes, and the widget or
console that opened it learns the result. The records still count only once
public DNS shows them; a return that says "done" is never taken as proof.
Secure sign-in
How secure sign-in connects a domain at a DNS provider with no sign-in you can use: what your customer sees, the lasting API key it makes, reconnecting, what we never see, and the API.
Provider setup
What to create at each DNS provider so the records can be written for you, which server address to allow, and what each provider requires before you start.