Skip to main content
PUT
/
registrar
/
v1
/
domains
/
{domain_name}
/
contacts
Update domain contact handles
curl --request PUT \
  --url https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "registrant": "ATOM-12345",
  "admin": "CONTACT_1-67890",
  "billing": "CONTACT_2-67890",
  "tech": "CONTACT_3-67890"
}
'
import requests

url = "https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts"

payload = {
    "registrant": "ATOM-12345",
    "admin": "CONTACT_1-67890",
    "billing": "CONTACT_2-67890",
    "tech": "CONTACT_3-67890"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'PUT',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    registrant: 'ATOM-12345',
    admin: 'CONTACT_1-67890',
    billing: 'CONTACT_2-67890',
    tech: 'CONTACT_3-67890'
  })
};

fetch('https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => json_encode([
    'registrant' => 'ATOM-12345',
    'admin' => 'CONTACT_1-67890',
    'billing' => 'CONTACT_2-67890',
    'tech' => 'CONTACT_3-67890'
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts"

	payload := strings.NewReader("{\n  \"registrant\": \"ATOM-12345\",\n  \"admin\": \"CONTACT_1-67890\",\n  \"billing\": \"CONTACT_2-67890\",\n  \"tech\": \"CONTACT_3-67890\"\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.put("https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"registrant\": \"ATOM-12345\",\n  \"admin\": \"CONTACT_1-67890\",\n  \"billing\": \"CONTACT_2-67890\",\n  \"tech\": \"CONTACT_3-67890\"\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://www.atom.com/api/registrar/v1/domains/{domain_name}/contacts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"registrant\": \"ATOM-12345\",\n  \"admin\": \"CONTACT_1-67890\",\n  \"billing\": \"CONTACT_2-67890\",\n  \"tech\": \"CONTACT_3-67890\"\n}"

response = http.request(request)
puts response.read_body
{
  "success": true,
  "message": "Domain contacts updated successfully",
  "data": {
    "domain_name": "example.com",
    "registrant_handle": "ATOM-12345",
    "admin_handle": "CONTACT_1-67890",
    "billing_handle": "CONTACT_2-67890",
    "tech_handle": "CONTACT_3-67890"
  }
}
{
  "success": true,
  "message": "Domain contact update initiated. Please verify the update via the email sent to your registered email address.",
  "verification_required": true,
  "data": {
    "domain_name": "example.com"
  }
}
{
  "success": false,
  "error": "Bad Request",
  "message": "Invalid input provided"
}
{
  "success": false,
  "error": "Unauthorized",
  "message": "Invalid registrar API token or access has been revoked. Please request registrar API access from your dashboard."
}
{
  "success": false,
  "error": "Bad Request",
  "message": "Invalid input provided"
}
{
  "success": false,
  "error": "Bad Request",
  "message": "Invalid input provided"
}
{
  "success": false,
  "error": "Bad Request",
  "message": "Invalid input provided"
}

Authorizations

Authorization
string
header
required

Registrar API Bearer token. Obtain from dashboard at /dashboard/seller/api-access after requesting Registrar API access.

Path Parameters

domain_name
string
required

Domain name (e.g. example.com)

Body

application/json

At least one of registrant, admin, billing, or tech must be provided. Omitted roles are left unchanged.

registrant
string

Contact handle to set as the registrant. Must belong to the authenticated user.

Example:

"ATOM-12345"

admin
string

Contact handle to set as the administrative contact.

Example:

"CONTACT_1-67890"

billing
string

Contact handle to set as the billing contact.

Example:

"CONTACT_2-67890"

tech
string

Contact handle to set as the technical contact.

Example:

"CONTACT_3-67890"

Response

Contacts updated successfully

success
boolean
Example:

true

message
string
Example:

"Domain contacts updated successfully"

data
object