URL: /guides/buying-a-domain

---
title: Buy a domain
description: Search, check availability, and register through the dashboard or the API.
---

## In the dashboard

<Steps>
  <Step title="Search">
    Open [`/search`](https://app.domaingenius.com.au/search) and type a name. Results stream in as alternative TLDs and AI-suggested variants come back.
  </Step>
  <Step title="Pick a TLD">
    Each result shows the year-1 price and renewal price. `.com.au` shows an eligibility hint if your org doesn't have an ABN on file yet.
  </Step>
  <Step title="Add registry data">
    For `.au`, paste your ABN. We verify it against the ABR before the registry call.
  </Step>
  <Step title="Confirm">
    The cost debits your prepaid balance. If the balance is short and auto-top-up is on, your card is charged for the shortfall. The domain is live within seconds.
  </Step>
</Steps>

## Via the API

```bash
# 1. Check availability
curl "https://api.domaingenius.com.au/api/v1/domains/availability?domain=hello-world.com.au" \
  -H "Authorization: Bearer $DG_KEY"

# 2. Register
curl -X POST "https://api.domaingenius.com.au/api/v1/orgs/$DG_ORG/domains/hello-world.com.au/register" \
  -H "Authorization: Bearer $DG_KEY" \
  -H "Content-Type: application/json" \
  -d '{"years": 2}'
```

For `.au`, include `eligibility_id` (from `POST /v1/orgs/{org_oid}/contacts/eligibility`) in the body.

## Via MCP

Ask your assistant: "register hello-world.com.au under org Acme for 2 years". It calls `register_domains`. If the cost exceeds your threshold the response is `pending_confirmation` — approve in the browser, then say "go ahead" so the assistant retries with the same `request_id`.

## Things that can go wrong

| Error | Why | Fix |
| --- | --- | --- |
| `INSUFFICIENT_BALANCE` | Balance too low, auto-top-up off | Top up or enable auto-top-up |
| `INELIGIBLE` | `.au` ABN/ACN didn't match registry record | Check the ABR record and rerun |
| `REGISTRY_TIMEOUT` | Registry slow or down | Retry with same `Idempotency-Key` |
| `PRICE_CHANGED` | Quoted price differed from registry | Re-quote with `GET /pricing/{tld}` and retry |
