curl --request POST \
--url https://www.atom.com/api/registrar/v1/domains/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain_name": "example.com",
"authcode": "<string>",
"nameservers": [
"ns1.custom-dns.com",
"ns2.custom-dns.com"
],
"privacy_protect": true,
"whois_privacy": true,
"auto_renew": true,
"contacts": {
"registrant": "<string>",
"admin": "<string>",
"billing": "<string>",
"tech": "<string>"
},
"dns_records": [
{
"content": "192.168.1.1",
"name": "www",
"ttl": 3600,
"comment": "<string>",
"priority": 123,
"service": "<string>",
"protocol": "<string>",
"weight": 123,
"port": 123,
"target": "<string>",
"flags": 123,
"tag": "<string>",
"value": "<string>"
}
]
}
'import requests
url = "https://www.atom.com/api/registrar/v1/domains/transfer"
payload = {
"domain_name": "example.com",
"authcode": "<string>",
"nameservers": ["ns1.custom-dns.com", "ns2.custom-dns.com"],
"privacy_protect": True,
"whois_privacy": True,
"auto_renew": True,
"contacts": {
"registrant": "<string>",
"admin": "<string>",
"billing": "<string>",
"tech": "<string>"
},
"dns_records": [
{
"content": "192.168.1.1",
"name": "www",
"ttl": 3600,
"comment": "<string>",
"priority": 123,
"service": "<string>",
"protocol": "<string>",
"weight": 123,
"port": 123,
"target": "<string>",
"flags": 123,
"tag": "<string>",
"value": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
domain_name: 'example.com',
authcode: '<string>',
nameservers: ['ns1.custom-dns.com', 'ns2.custom-dns.com'],
privacy_protect: true,
whois_privacy: true,
auto_renew: true,
contacts: {
registrant: '<string>',
admin: '<string>',
billing: '<string>',
tech: '<string>'
},
dns_records: [
{
content: '192.168.1.1',
name: 'www',
ttl: 3600,
comment: '<string>',
priority: 123,
service: '<string>',
protocol: '<string>',
weight: 123,
port: 123,
target: '<string>',
flags: 123,
tag: '<string>',
value: '<string>'
}
]
})
};
fetch('https://www.atom.com/api/registrar/v1/domains/transfer', 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/transfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'domain_name' => 'example.com',
'authcode' => '<string>',
'nameservers' => [
'ns1.custom-dns.com',
'ns2.custom-dns.com'
],
'privacy_protect' => true,
'whois_privacy' => true,
'auto_renew' => true,
'contacts' => [
'registrant' => '<string>',
'admin' => '<string>',
'billing' => '<string>',
'tech' => '<string>'
],
'dns_records' => [
[
'content' => '192.168.1.1',
'name' => 'www',
'ttl' => 3600,
'comment' => '<string>',
'priority' => 123,
'service' => '<string>',
'protocol' => '<string>',
'weight' => 123,
'port' => 123,
'target' => '<string>',
'flags' => 123,
'tag' => '<string>',
'value' => '<string>'
]
]
]),
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/transfer"
payload := strings.NewReader("{\n \"domain_name\": \"example.com\",\n \"authcode\": \"<string>\",\n \"nameservers\": [\n \"ns1.custom-dns.com\",\n \"ns2.custom-dns.com\"\n ],\n \"privacy_protect\": true,\n \"whois_privacy\": true,\n \"auto_renew\": true,\n \"contacts\": {\n \"registrant\": \"<string>\",\n \"admin\": \"<string>\",\n \"billing\": \"<string>\",\n \"tech\": \"<string>\"\n },\n \"dns_records\": [\n {\n \"content\": \"192.168.1.1\",\n \"name\": \"www\",\n \"ttl\": 3600,\n \"comment\": \"<string>\",\n \"priority\": 123,\n \"service\": \"<string>\",\n \"protocol\": \"<string>\",\n \"weight\": 123,\n \"port\": 123,\n \"target\": \"<string>\",\n \"flags\": 123,\n \"tag\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://www.atom.com/api/registrar/v1/domains/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain_name\": \"example.com\",\n \"authcode\": \"<string>\",\n \"nameservers\": [\n \"ns1.custom-dns.com\",\n \"ns2.custom-dns.com\"\n ],\n \"privacy_protect\": true,\n \"whois_privacy\": true,\n \"auto_renew\": true,\n \"contacts\": {\n \"registrant\": \"<string>\",\n \"admin\": \"<string>\",\n \"billing\": \"<string>\",\n \"tech\": \"<string>\"\n },\n \"dns_records\": [\n {\n \"content\": \"192.168.1.1\",\n \"name\": \"www\",\n \"ttl\": 3600,\n \"comment\": \"<string>\",\n \"priority\": 123,\n \"service\": \"<string>\",\n \"protocol\": \"<string>\",\n \"weight\": 123,\n \"port\": 123,\n \"target\": \"<string>\",\n \"flags\": 123,\n \"tag\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.atom.com/api/registrar/v1/domains/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain_name\": \"example.com\",\n \"authcode\": \"<string>\",\n \"nameservers\": [\n \"ns1.custom-dns.com\",\n \"ns2.custom-dns.com\"\n ],\n \"privacy_protect\": true,\n \"whois_privacy\": true,\n \"auto_renew\": true,\n \"contacts\": {\n \"registrant\": \"<string>\",\n \"admin\": \"<string>\",\n \"billing\": \"<string>\",\n \"tech\": \"<string>\"\n },\n \"dns_records\": [\n {\n \"content\": \"192.168.1.1\",\n \"name\": \"www\",\n \"ttl\": 3600,\n \"comment\": \"<string>\",\n \"priority\": 123,\n \"service\": \"<string>\",\n \"protocol\": \"<string>\",\n \"weight\": 123,\n \"port\": 123,\n \"target\": \"<string>\",\n \"flags\": 123,\n \"tag\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}Transfer a domain in
Initiate an inbound transfer. Required: domain_name and authcode (EPP code from the losing registrar). Optional nameservers, privacy_protect, auto_renew, contacts, and dns_records may be sent in the same request. Contacts and WHOIS privacy are submitted with the transfer; nameservers, auto-renew, and DNS records are applied when the transfer completes (typically 5–7 days). This is transfer-in only. Transfer-out of Atom is not available via API — use the Atom dashboard.
curl --request POST \
--url https://www.atom.com/api/registrar/v1/domains/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain_name": "example.com",
"authcode": "<string>",
"nameservers": [
"ns1.custom-dns.com",
"ns2.custom-dns.com"
],
"privacy_protect": true,
"whois_privacy": true,
"auto_renew": true,
"contacts": {
"registrant": "<string>",
"admin": "<string>",
"billing": "<string>",
"tech": "<string>"
},
"dns_records": [
{
"content": "192.168.1.1",
"name": "www",
"ttl": 3600,
"comment": "<string>",
"priority": 123,
"service": "<string>",
"protocol": "<string>",
"weight": 123,
"port": 123,
"target": "<string>",
"flags": 123,
"tag": "<string>",
"value": "<string>"
}
]
}
'import requests
url = "https://www.atom.com/api/registrar/v1/domains/transfer"
payload = {
"domain_name": "example.com",
"authcode": "<string>",
"nameservers": ["ns1.custom-dns.com", "ns2.custom-dns.com"],
"privacy_protect": True,
"whois_privacy": True,
"auto_renew": True,
"contacts": {
"registrant": "<string>",
"admin": "<string>",
"billing": "<string>",
"tech": "<string>"
},
"dns_records": [
{
"content": "192.168.1.1",
"name": "www",
"ttl": 3600,
"comment": "<string>",
"priority": 123,
"service": "<string>",
"protocol": "<string>",
"weight": 123,
"port": 123,
"target": "<string>",
"flags": 123,
"tag": "<string>",
"value": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
domain_name: 'example.com',
authcode: '<string>',
nameservers: ['ns1.custom-dns.com', 'ns2.custom-dns.com'],
privacy_protect: true,
whois_privacy: true,
auto_renew: true,
contacts: {
registrant: '<string>',
admin: '<string>',
billing: '<string>',
tech: '<string>'
},
dns_records: [
{
content: '192.168.1.1',
name: 'www',
ttl: 3600,
comment: '<string>',
priority: 123,
service: '<string>',
protocol: '<string>',
weight: 123,
port: 123,
target: '<string>',
flags: 123,
tag: '<string>',
value: '<string>'
}
]
})
};
fetch('https://www.atom.com/api/registrar/v1/domains/transfer', 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/transfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'domain_name' => 'example.com',
'authcode' => '<string>',
'nameservers' => [
'ns1.custom-dns.com',
'ns2.custom-dns.com'
],
'privacy_protect' => true,
'whois_privacy' => true,
'auto_renew' => true,
'contacts' => [
'registrant' => '<string>',
'admin' => '<string>',
'billing' => '<string>',
'tech' => '<string>'
],
'dns_records' => [
[
'content' => '192.168.1.1',
'name' => 'www',
'ttl' => 3600,
'comment' => '<string>',
'priority' => 123,
'service' => '<string>',
'protocol' => '<string>',
'weight' => 123,
'port' => 123,
'target' => '<string>',
'flags' => 123,
'tag' => '<string>',
'value' => '<string>'
]
]
]),
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/transfer"
payload := strings.NewReader("{\n \"domain_name\": \"example.com\",\n \"authcode\": \"<string>\",\n \"nameservers\": [\n \"ns1.custom-dns.com\",\n \"ns2.custom-dns.com\"\n ],\n \"privacy_protect\": true,\n \"whois_privacy\": true,\n \"auto_renew\": true,\n \"contacts\": {\n \"registrant\": \"<string>\",\n \"admin\": \"<string>\",\n \"billing\": \"<string>\",\n \"tech\": \"<string>\"\n },\n \"dns_records\": [\n {\n \"content\": \"192.168.1.1\",\n \"name\": \"www\",\n \"ttl\": 3600,\n \"comment\": \"<string>\",\n \"priority\": 123,\n \"service\": \"<string>\",\n \"protocol\": \"<string>\",\n \"weight\": 123,\n \"port\": 123,\n \"target\": \"<string>\",\n \"flags\": 123,\n \"tag\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://www.atom.com/api/registrar/v1/domains/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain_name\": \"example.com\",\n \"authcode\": \"<string>\",\n \"nameservers\": [\n \"ns1.custom-dns.com\",\n \"ns2.custom-dns.com\"\n ],\n \"privacy_protect\": true,\n \"whois_privacy\": true,\n \"auto_renew\": true,\n \"contacts\": {\n \"registrant\": \"<string>\",\n \"admin\": \"<string>\",\n \"billing\": \"<string>\",\n \"tech\": \"<string>\"\n },\n \"dns_records\": [\n {\n \"content\": \"192.168.1.1\",\n \"name\": \"www\",\n \"ttl\": 3600,\n \"comment\": \"<string>\",\n \"priority\": 123,\n \"service\": \"<string>\",\n \"protocol\": \"<string>\",\n \"weight\": 123,\n \"port\": 123,\n \"target\": \"<string>\",\n \"flags\": 123,\n \"tag\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.atom.com/api/registrar/v1/domains/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain_name\": \"example.com\",\n \"authcode\": \"<string>\",\n \"nameservers\": [\n \"ns1.custom-dns.com\",\n \"ns2.custom-dns.com\"\n ],\n \"privacy_protect\": true,\n \"whois_privacy\": true,\n \"auto_renew\": true,\n \"contacts\": {\n \"registrant\": \"<string>\",\n \"admin\": \"<string>\",\n \"billing\": \"<string>\",\n \"tech\": \"<string>\"\n },\n \"dns_records\": [\n {\n \"content\": \"192.168.1.1\",\n \"name\": \"www\",\n \"ttl\": 3600,\n \"comment\": \"<string>\",\n \"priority\": 123,\n \"service\": \"<string>\",\n \"protocol\": \"<string>\",\n \"weight\": 123,\n \"port\": 123,\n \"target\": \"<string>\",\n \"flags\": 123,\n \"tag\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}{
"success": false,
"error": "<string>",
"message": "<string>"
}Authorizations
Registrar API token from https://www.atom.com/dashboard/seller/api-access
Body
"example.com"
EPP / auth code from the losing registrar
Set nameservers in the same request. Pass an array of hostnames (treated as custom) or {type, nameservers}. type: atom (ns1/ns2.atom.com), parking (ns1/ns2.atomregistrar.com), or custom. DNS records only apply when the domain stays on Atom nameservers (atom or parking).
["ns1.custom-dns.com", "ns2.custom-dns.com"]
WHOIS privacy / RDDS redaction. Alias: whois_privacy. Not available for .io.
Alias for privacy_protect
Enable or disable auto-renew.
Existing contact handles owned by this account (from GET /contacts). Any combination of roles.
Show child attributes
Show child attributes
DNS records to create after the domain is on Atom nameservers. Max 50. Same fields as POST /domains/{domain_name}/records. Skipped if nameservers are custom.
50Show child attributes
Show child attributes
Response
Successful operation
The response is of type object.