Create transfer

Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does.

POST /v1/domain/transfer

Addresshttps://api.hanzo.ai/v1/domain/transfer
MethodPOST
Operationpost_domain_transfer
AuthAuthorization: Bearer $HANZO_API_KEY

Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does.

It is priced and charged exactly like a registration: authorize the org's prepaid balance, ask the registrar for the transfer, capture only after the registrar accepts. A name the registrar will not price is 409, an insufficient balance is 402, and a deployment with no registrar credentials is 503.

It requires a validated principal; the ownership record is written under that org as soon as the registrar ACCEPTS the request, which is not the same instant the transfer completes at the losing registrar. Unlike a registration this does not provision a zone, so the record carries this deployment's configured nameservers.

Request

3 fields, body application/json (required).

FieldInTypeRequiredDescription
authCodebodystringyesAuthCode is the transfer authorization the losing registrar issued.
domainbodystringyesDomain is the name to move in.
yearsbodyinteger (int64)—Years is the term to buy on transfer, defaulting to 1.

Response

StatusBodyMeaning
200domain.RegisterResultok
defaultproblem-detailsrefused

200 body — 17 fields.

FieldInTypeAlwaysDescription
quotebodydomain.Offer—
quote.availablebodyboolean—whether it can be bought right now
quote.currencybodystring—the currency both prices are in
quote.domainbodystring—the name this quote prices
quote.premiumbodyboolean—whether the registry prices it above the standard rate
quote.priceCentsbodyinteger (int64)—sell (first-term registration)
quote.renewalPriceCentsbodyinteger (int64)—sell (renewal)
quote.tldbodystring—the top-level domain the name sits under
recordbodydomain.Holding—
record.costCentsbodyinteger (int64)—wholesale cost
record.domainbodystring—the name owned
record.expiresAtbodystring—when the registration lapses, RFC3339
record.nameserversbodystring[]—the authoritative nameservers the name points at
record.orderbodyinteger (int64)—registrar order id
record.orgbodystring—the org that owns the domain
record.priceCentsbodyinteger (int64)—what the customer paid (sell)
record.registeredAtbodyinteger (int64)—unix seconds

Failure carries the platform error shape — see Errors.

Examples

hanzo domain transfer \
  --auth-code <authCode> \
  --domain <domain>
import { Configuration, DomainApi } from 'hanzoai';

const api = new DomainApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postDomainTransfer({ domain: "<domain>", authCode: "<authCode>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import DomainApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = DomainApi(client).post_domain_transfer(domain="<domain>", auth_code="<authCode>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.DomainAPI.PostDomainTransfer(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, domain_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = domain_api::post_domain_transfer(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.DomainApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new DomainApi(client).postDomainTransfer();
curl -X POST https://api.hanzo.ai/v1/domain/transfer \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "domain": "<domain>",
       "authCode": "<authCode>"
     }'

MCP reaches domain through the domain tool, which names its 7 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_domain_availability"
         }
       }
     }'

Domain API · All Hanzo APIs · Interactive reference

Was this page useful?