Add the customer’s domain.
Create it from the dashboard, the API or an embedded flow in your product.
- Input
- Dashboard · REST API
- State
- Pending DNS
- Returns
- Exact CNAME record
The custom-domain layer for SaaS
Your customers connect portal.client.com. We handle DNS verification, certificates and HTTPS routing to your application.
Free for now · Set up in minutes
One path, observable end to end. Your customer sees a simple instruction while the infrastructure keeps moving.
Create it from the dashboard, the API or an embedded flow in your product.
Your customer adds the record at their DNS provider. We detect it automatically and report a precise status.
Once DNS is valid, we provision TLS and activate the route. Certificates renew without intervention.
Connect customer-owned domains to your application.
app.acme.euVerifiedIssuedLiveapp.northstar.ioVerifiedIssuedLiveconsole.meridian.frCheckingWaitingWaitingStart with the page that matches the job in front of your team.
Create the customer domain and receive the exact DNS instruction in the same response. Idempotency and lifecycle states are built in.
$ npm install @subdomainto/node
const domain = await client.domains.create(
'portal.acme.eu',
'acme-portal',
{ destinationId: 'dst_main' }
); Returns DNS instructions immediately$ composer require subdomainto/sdk
$domain = $client->domains()->create(
'portal.acme.eu',
'acme-portal',
'dst_main'
); Returns DNS instructions immediately$ pip install subdomainto
domain = client.domains.create(
'portal.acme.eu',
'acme-portal',
'dst_main'
) Returns DNS instructions immediately$ composer require subdomainto/laravel
$domain = SubdomainTo::domains()->create(
'portal.acme.eu',
'acme-portal',
'dst_main'
); Returns DNS instructions immediately$ composer require subdomainto/symfony
$domain = $subdomainTo->domains()->create(
'portal.acme.eu',
'acme-portal',
'dst_main'
); Returns DNS instructions immediately$ pip install subdomainto-django
client = get_client()
domain = client.domains.create(
'portal.acme.eu',
'acme-portal',
'dst_main'
) Returns DNS instructions immediately$ pip install subdomainto-fastapi
client = SubdomainToClient()()
domain = client.domains.create(
'portal.acme.eu',
'acme-portal',
'dst_main'
) Returns DNS instructions immediately$ npm install @subdomainto/nextjs
const client = createSubdomainToClient();
const domain = await client.domains.create(
'portal.acme.eu',
'acme-portal',
{ destinationId: 'dst_main' }
); Returns DNS instructions immediately{
"hostname": "portal.acme.eu",
"status": "pending_dns",
"dns_records": [{
"type": "CNAME",
"value": "in.subdomain.to"
}]
}
Infrastructure included
Issuance, secure storage and renewals are handled automatically.
Only registered hostnames reach your HTTPS destination.
See DNS, certificate and routing statuses separately—in the UI or API.
Domain metadata and certificate operations stay in Europe.