Skip to main content
Apps serve production traffic on their default {projectName}.vercel.app domain until you attach your own. There are two ways to do that:
  • Add a custom domain — attaches any domain you control to the app. You configure DNS yourself (point the domain at the app).
  • Connect a company domain — links a domain owned via the Domains primitive (purchased or registered through naive domains). The domain is attached to the app’s hosting, recorded on the app, and set as primary in one step; DNS verification status is tracked on the company domain (app_connect_status).

List Domains


Add Custom Domain

Attaches the domain to the app’s hosting:

Request Body

Must be a real public domain. RFC 2606 / special-use TLDs — .test, .example, .invalid, .localhost — and bare single labels are rejected with invalid_input: they can never be DNS-verified, so accepting them only produces a row stuck at verified: false. The app must already have a hosting project linked. Without one there is nothing to attach DNS to, and the call refuses with feature_not_configured (501) rather than writing an unusable row. Provider failures are surfaced too: a non-2xx from the hosting API (other than 409 “already attached”, which is success) returns provider_error with the upstream status in the hint.

Response

200
After adding, point DNS at the hosting platform (apex: A 76.76.21.21; subdomains: CNAME cname.vercel-dns.com). You can check the expected configuration via the hosting proxy: GET v9/projects/{projectId}/domains/{domain}.

Remove Domain

Removes the domain from the app and its hosting:
200

Set Primary Domain

Marks a domain as the app’s primary. The next publish aliases production to the primary domain:
200

Connect Company Domain

Connect a domain managed by naive domains to serve this app’s production deployment. Attaches it to the app’s hosting, records it on the app, and sets it as primary:
200
If pendingDns is true:
  • System domain (*.usenaive.ai): do not configure DNS yourself. The platform writes the apex A (+ any ownership TXT) on the shared zone. Call Verify DNS. Agents cannot set-record on system domains (403 SYSTEM_DOMAIN).
  • Custom / purchased company domain: configure registrar DNS yourself, then verify.
The company domain’s app_connect_status transitions pending_dnsconnected. This is separate from email dns_status / naive domains verify.

Disconnect Company Domain

200

Verify DNS

Trigger DNS verification for a connected company domain:
200

System vs custom

Errors

404
400
400
501