---
title: "Add an existing domain to the Vercel platform"
method: POST
path: "/v7/domains"
tags: ["domains"]
---

# Add an existing domain to the Vercel platform

`POST /v7/domains`

## Request

- Base URL: `https://api.vercel.com`
- URL: `https://api.vercel.com/v7/domains`
- Auth: HTTP bearer

This endpoint is used for adding a new apex domain name with Vercel for the authenticating user. Note: This endpoint is no longer used for initiating domain transfers from external registrars to Vercel. For this, please use the endpoint [Transfer-in a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/transfer-in-a-domain).

## Query parameters

- `teamId` string
- `slug` string

## Request body

- union
  - object: add
    - `method` string: The domain operation to perform.
    - `name` string, required: The domain name you want to add.
    - `cdnEnabled` boolean: Whether the domain has the Vercel CDN enabled or not.
    - `zone` boolean: Whether to create a DNS zone on Vercel. Set `true` if using Vercel nameservers.
  - object: move-in
    - `method` string, required: The domain operation to perform.
    - `name` string, required: The domain name you want to add.
    - `token` string: The move-in token from Move Requested email.

## Response `200`

- object
  - `domain` object, required
    - `boughtAt` number, nullable, required: If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.
    - `createdAt` number, required: Timestamp in milliseconds when the domain was created in the registry.
    - `creator` object, required: An object containing information of the domain creator, including the user's id, username, and email.
      - `customerId` string, nullable
      - `email` string, required
      - `id` string, required
      - `isDomainReseller` false | true
      - `username` string, required
    - `customNameservers` string[]: A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.
    - `echMode` 'auto' | 'disabled' | 'enabled', required: Whether the domain is enrolled in Encrypted Client Hello. `auto` leaves the decision to Vercel, `enabled` always enrolls, and `disabled` never enrolls and opts out of automatic enrollment.
    - `expiresAt` number, nullable, required: Timestamp in milliseconds at which the domain is set to expire. null if not bought with Vercel.
    - `id` string, required: The unique identifier of the domain.
    - `intendedNameservers` string[], required: A list of the intended nameservers for the domain to point to Vercel DNS.
    - `name` string, required: The domain name.
    - `nameservers` string[], required: A list of the current nameservers of the domain.
    - `renew` false | true: Indicates whether the domain is set to automatically renew.
    - `serviceType` 'external' | 'na' | 'zeit.world', required: The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.
    - `teamId` string, nullable, required
    - `transferredAt` number, nullable: Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.
    - `transferStartedAt` number: If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.
    - `userId` string, required
    - `verified` false | true, required: If the domain has the ownership verified.

## Other responses

- `400`: One of the provided values in the request body is invalid.
- `401`: The request is not authorized.
- `402`: The account is missing a payment so payment method must be updated
- `403`: You do not have permission to access this resource.
- `404`
- `409`: The domain is not allowed to be used
- `410`

## Changes

- **2026-08-26** `279c61d463bf`: 1 info
  - added the required property `domain/echMode` to the response with the `200` status
- **2026-07-21** `2ae10ee9d21c`: 1 info
  - added the non-success response with the status `410`
- **2026-06-11** `14b4658f819e`: 1 warning
  - removed the optional property `domain/registrar` from the response with the `200` status
- **2026-01-22** `c12186034433`: 1 breaking, 7 warning, 1 info
  - removed `subschema #3` from the request body `oneOf` list
  - removed the optional property `domain/orderedAt` from the response with the `200` status
  - added the new `false` enum value to the `domain/creator/isDomainReseller` response property for the response status `200`
  - added the new `false` enum value to the `domain/renew` response property for the response status `200`
  - …5 more
- **2025-10-09** `50caddad4ae7`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/vercel/apis/vercel-api/changes/v7/domains/post.md)

---

[API](https://skmtc.dev/vercel/apis/vercel-api.md) - [All operations](https://skmtc.dev/vercel/apis/vercel-api/llms.txt) - [OpenAPI document](https://skmtc.dev/vercel/apis/vercel-api/revisions/60686c0e1f6a?raw)
