Update contacts
View as MarkdownChange the registrant, admin, billing, or tech contact on a domain you own via PATCH /v1/domains/{domain}/contacts.
Overview
Update the registrant, admin, billing, or tech contact on a domain you own using PATCH /v1/domains/{domain}/contacts. Each contact role can be updated independently — include only the roles you want to change in the request body. The registrant contact is the legal owner of the domain and is required; the other three roles default to the registrant if omitted.
Prerequisites
The following prerequisites are required before you update domain contacts:
- A GoDaddy account that owns the domain
- A Personal Access Token with
domains.domain:updatescope - Registrant name, email, phone (E.164 format), and mailing address
Update the registrant contact
Send a PATCH with only contactRegistrant in the body. Admin, billing, and tech contacts are untouched when omitted. Returns 204 No Content.
The following procedure updates the registrant contact for a domain.
Some TLDs require unlock before a registrant change
A subset of ccTLDs require registry lock to be disabled before the registry accepts a registrant update. If you receive a 409, check whether the domain is locked and disable it before retrying. Re-enable lock after the update completes. See Registry lock.
- Run the following command for your preferred language:
curl -s -X PATCH "https://api.godaddy.com/v1/domains/example.com/contacts" \
-H "Authorization: Bearer $GODADDY_PAT" \
-H "Content-Type: application/json" \
-d '{
"contactRegistrant": {
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": {
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US"
}
}
}'const pat = process.env.GODADDY_PAT;
const body = {
contactRegistrant: {
nameFirst: "Jane",
nameLast: "Smith",
email: "jane@example.com",
phone: "+1.5555550100",
addressMailing: {
address1: "123 Main St",
city: "Tempe",
state: "AZ",
postalCode: "85281",
country: "US",
},
},
};
const res = await fetch("https://api.godaddy.com/v1/domains/example.com/contacts", {
method: "PATCH",
headers: {
Authorization: `Bearer ${pat}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
console.log(res.status); // expect 204import os, requests
pat = os.environ["GODADDY_PAT"]
body = {
"contactRegistrant": {
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": {
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US",
},
}
}
res = requests.patch(
"https://api.godaddy.com/v1/domains/example.com/contacts",
json=body,
headers={
"Authorization": f"Bearer {pat}",
"Content-Type": "application/json",
},
)
print(res.status_code) # expect 204package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
pat := os.Getenv("GODADDY_PAT")
body := map[string]any{
"contactRegistrant": map[string]any{
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": map[string]any{
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US",
},
},
}
b, _ := json.Marshal(body)
req, _ := http.NewRequest("PATCH",
"https://api.godaddy.com/v1/domains/example.com/contacts",
bytes.NewReader(b))
req.Header.Set("Authorization", "Bearer "+pat)
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
fmt.Println(res.StatusCode) // expect 204
}Returns 204 No Content on success.
Update all four roles at once
Include all four roles in one call. Each uses the same Contact shape.
The following procedure updates all four contact roles in a single request.
- Run the following command:
curl -s -X PATCH "https://api.godaddy.com/v1/domains/example.com/contacts" \
-H "Authorization: Bearer $GODADDY_PAT" \
-H "Content-Type: application/json" \
-d '{
"contactRegistrant": {
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": {
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US"
}
},
"contactAdmin": {
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": {
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US"
}
},
"contactBilling": {
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": {
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US"
}
},
"contactTech": {
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"phone": "+1.5555550100",
"addressMailing": {
"address1": "123 Main St",
"city": "Tempe",
"state": "AZ",
"postalCode": "85281",
"country": "US"
}
}
}'Contact object
| Field | Required | Description |
|---|---|---|
nameFirst | Yes | First name. |
nameLast | Yes | Last name. |
email | Yes | Email address. |
phone | Yes | Phone in E.164 format: +1.5555550100. |
addressMailing | Yes | Mailing address object — see below. |
nameMiddle | No | Middle name. |
organization | No | Organization name. |
jobTitle | No | Job title. |
fax | No | Fax number in E.164 format. |
Mailing address
| Field | Required | Description |
|---|---|---|
address1 | Yes | Street address line 1. |
address2 | No | Street address line 2. |
city | Yes | City. |
state | Yes | State or province code (for countries that use it). |
postalCode | Yes | Postal code. |
country | Yes | Two-letter ISO 3166-1 alpha-2 country code (e.g. US, GB, DE). |
Request body summary
PATCH /v1/domains/{domain}/contacts accepts a DomainContacts object.
| Role | Required | Description |
|---|---|---|
contactRegistrant | Yes | The legal owner of the domain. |
contactAdmin | No | Administrative contact. Not modified if omitted. |
contactBilling | No | Billing contact. Not modified if omitted. |
contactTech | No | Technical contact. Not modified if omitted. |
Common errors
| Status | Most likely cause |
|---|---|
400 | Malformed request body or invalid contact field (bad email format, invalid country code). Inspect fields[] in the error response. |
403 | Credential lacks write access to this domain. |
404 | Domain doesn't exist or isn't owned by the authenticated account. |
409 | Domain is locked and the TLD requires unlock for registrant changes. |
422 | TLD-specific validation failure (e.g. missing organization for certain country-code TLDs). |
Full error envelope: Errors.
Reference
Next
Agent & Automation Notes
domains.domain:updateRelated
API References
Concepts
Last updated on
How is this guide?