---
title: "Update or move apex domain"
method: PATCH
path: "/v3/domains/{domain}"
tags: ["domains"]
---

# Update or move apex domain

`PATCH /v3/domains/{domain}`

## Request

- Base URL: `https://api.vercel.com`
- URL: `https://api.vercel.com/v3/domains/{domain}`
- Auth: HTTP bearer

Update or move apex domain. Note: This endpoint is no longer used for updating auto-renew or nameservers. For this, please use the endpoints [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) and [Update nameservers for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-nameservers-for-a-domain).

## Path parameters

- `domain` string, required

## Query parameters

- `teamId` string
- `slug` string

## Request body

- union
  - object: update
    - `op` string
    - `renew` boolean: This field is deprecated. Please use PATCH /v1/registrar/domains/{domainName}/auto-renew instead.
    - `customNameservers` string[]: This field is deprecated. Please use PATCH /v1/registrar/domains/{domainName}/nameservers instead.
    - `zone` boolean: Specifies whether this is a DNS zone that intends to use Vercel's nameservers.
    - `echMode` 'auto' | 'disabled': Encrypted Client Hello enrollment. 'auto' leaves it to Vercel, 'disabled' never enrolls and opts out of automatic enrollment.
  - object: move-out
    - `op` string
    - `destination` string: User or team to move domain to

## Response `200`

- union
  - object
    - `moved` false | true, required
  - object
    - `moved` false | true, required
    - `token` string, required
  - object
    - `customNameservers` string[]
    - `echMode` 'auto' | 'disabled' | 'enabled', required
    - `renew` false | true
    - `zone` false | true

## Other responses

- `400`: One of the provided values in the request body is invalid. One of the provided values in the request query is invalid.
- `401`: The request is not authorized.
- `403`: You do not have permission to access this resource.
- `404`
- `409`
- `410`
- `500`

## Changes

- **2026-08-28** `cea4418b1cd8`: 1 breaking, 1 info
  - removed the enum value `enabled` of the request property `oneOf[subschema #1]/echMode`
  - removed the non-success response with the status `402`
- **2026-08-27** `d88f9c67a379`: 1 info
  - added the non-success response with the status `402`
- **2026-08-26** `279c61d463bf`: 2 info
  - added the new optional request property `oneOf[subschema #1]/echMode`
  - added the required property `oneOf[subschema #3]/echMode` to the response with the `200` status
- **2026-07-21** `2ae10ee9d21c`: 1 info
  - added the non-success response with the status `410`
- **2026-01-22** `c12186034433`: 3 breaking, 1 info
  - request body became required
  - the `path` request parameter `domain` became required
  - added `subschema #1, subschema #2, subschema #3` to the response body `oneOf` list for the response status `200`
  - removed `subschema #1, subschema #2, subschema #3` from the response body `oneOf` list for the response status `200`

[Operation history](https://skmtc.dev/vercel/apis/vercel-api/changes/v3/domains/:domain/patch.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)
