Vercel custom domains
Add, verify, monitor, and remove Vercel project domains with a typed, server-side TypeScript adapter that preserves exact DNS instructions.
Scope and credentials
The adapter adds, retrieves, lists, verifies, and removes domains for one Vercel project. It does not deploy applications, edit customer DNS, register domains, or move a domain from another project. Set VERCEL_TOKEN, VERCEL_PROJECT_ID, and optional VERCEL_TEAM_ID. Give the token only the project/team access required for domain management.
import { createDomainClient } from "@opencoredev/domain-sdk";
import { vercel } from "@opencoredev/domain-sdk/vercel";
export const domains = createDomainClient({
provider: vercel({
token: process.env.VERCEL_TOKEN!,
projectId: process.env.VERCEL_PROJECT_ID!,
teamId: process.env.VERCEL_TEAM_ID,
}),
});
const domain = await domains.add("app.customer.com");DNS, verification, and certificates
Routing records come from Vercel's domain-configuration recommendations; ownership challenges become ownership records. verify() calls the project-domain verification endpoint. The adapter reports active configuration without inventing certificate issuer or expiration metadata unavailable from the project-domain API.
Errors and limitations
Expired tokens map to AUTHENTICATION_FAILED; inaccessible resources map to PERMISSION_DENIED; another project/account maps to DOMAIN_CONFLICT; rate limits preserve retryAfter. Duplicate adds return current state only when projectId matches. Wildcards are not supported in v0.1.
Official references: project domains, verification, and domain configuration.
Read next: Troubleshoot pending DNS.
Custom domain provider comparison
Compare custom domain support across Vercel, Cloudflare for SaaS, Railway, Render, and Netlify before choosing a TypeScript adapter.
Cloudflare for SaaS custom domains
Manage Cloudflare for SaaS Custom Hostnames with a server-side TypeScript adapter for normalized status, DNS records, and certificates.
