Domain connection for SaaS

Your customers connect a domain in one click

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 write

One 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

Three steps. Your request never waits on DNS.

01

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.

02

Your customer approves it

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.

03

You hear when it goes live

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

Two halves. The key stays on your server, and the page only gets a token.

// 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

Two records. Nothing else.

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
CNAMEAdded

%target%.connect.relaydns.dev

app.acme.com

a1b2c3.connect.relaydns.dev

Points the subdomain at a label issued for this setup alone.

TXTAdded

relaydns-verify=%token%

relaydns-verify.app.acme.com

relaydns-verify=9f3e…

Ties the domain back to the request that asked for it.

  • hostRequired

    Never the apex

    Both records land under a subdomain your customer named.

  • txtConflictMatchingPrefix

    Only its own TXT

    An older relaydns-verify record is swapped. Other TXT records stay.

  • syncPubKeyDomain

    Signed, checked first

    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

Twenty cents when it works. Nothing when it does not.

One plan, no seats, no minimum. You pay for the setups we finish, not the ones your customer finishes by hand.

Charged

  • A domain that connects in one click, the first time it verifies

Once per domain. That is the whole meter.

Never charged

  • Domains connected by copying records
  • Setups your customer abandons
  • Reconnecting a domain you already paid for
  • Seats, projects and API keys
  • Checks, polling and webhooks
Full pricing

Pay as you go

No seats, no minimum
$0.20per automatic setup

Records to copy by hand are free, however many.

100
100%

You would pay

$20

100 in one click

0 by records, free

At 100% this is the most that month could cost.

Get started

Try it on one domain. Nothing is charged until one connects in one click.

  1. 1Create an accountAn email and a password
  2. 2Make a project and an API keyThe key is shown once
  3. 3Connect your first domainOne call from your server
  4. The account and the key take about a minute.