You create a setup
Your server posts the domain and the records it needs. The call returns as soon as the setup exists, with a token that is safe to hand to a browser. Nothing waits on DNS.
Domain connection for SaaS
Their own provider writes the records once they approve it. We watch until the records are live, then tell your product.
No card required. You pay when a domain connects.
See what we writeOne click
Cloudflare
Your customer approves on a Cloudflare screen and the records are written for them.
Records to copy
Every other provider
We show the exact records, check them on demand, and tell you when they answer. Free.
How it works
Your server posts the domain and the records it needs. The call returns as soon as the setup exists, with a token that is safe to hand to a browser. Nothing waits on DNS.
The widget works out who runs their DNS. Where that provider supports Domain Connect, approving the change is the whole task. Where it does not, we show the exact records to add and check them whenever they ask.
We query public resolvers on a schedule until the records answer, then move the setup to verified. Your product is told, so nobody has to sit and refresh.
Integration
// Your server. The API key is a secret and stays here.// Your dashboard's Integration page fills in API_URL.const res = await fetch(API_URL + "/v1/dns-sessions", { method: "POST", headers: { "X-Api-Key": process.env.RELAYDNS_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ domain: "app.customer.com", records: [ { type: "CNAME", name: "@", value: "origin.yourapp.com" }, ], }),}); const { widgetToken } = await res.json();// Send widgetToken to the browser. Never the API key.What we write
This is our Domain Connect template, the file a provider runs when your customer approves. It was reviewed and merged in public.
Read the template%target%.connect.relaydns.dev
app.acme.com
a1b2c3.connect.relaydns.dev
Points the subdomain at a label issued for this setup alone.
relaydns-verify=%token%
relaydns-verify.app.acme.com
relaydns-verify=9f3e…
Ties the domain back to the request that asked for it.
hostRequired
Both records land under a subdomain your customer named.
txtConflictMatchingPrefix
An older relaydns-verify record is swapped. Other TXT records stay.
syncPubKeyDomain
The provider verifies our key before writing anything.
Coming soonThe email template is merged, and Cloudflare serves it only for our own account while testing finishes. Until then, those records are shown to copy.
Pricing
One plan, no seats, no minimum. You pay for the setups we finish, not the ones your customer finishes by hand.
Charged
Once per domain. That is the whole meter.
Never charged
Pay as you go
No seats, no minimumRecords to copy by hand are free, however many.
You would pay
$20
100 in one click
0 by records, free
At 100% this is the most that month could cost.
Get started