---
title: "Get detailed information about a domain you own"
method: GET
path: "/api/domains/{domain}"
tags: ["Domains"]
---

# Get detailed information about a domain you own

`GET /api/domains/{domain}`

## Request

- Base URL: `https://domani.run`
- URL: `https://domani.run/api/domains/{domain}`
- Auth: HTTP bearer

Returns comprehensive information about a domain: status, purchase date, expiry, payment method, security lock, WHOIS privacy, auto-renew status, and registration dates. The `registrar` object may be `null` if extended data is unavailable.

## Path parameters

- `domain` string, required

## Response `200`

Domain details

- DomainDetail: Detailed domain information
  - `domain` string, required
  - `status` 'active' | 'expired' | 'pending', required
  - `auto_renew` boolean, required: Whether auto-renew is enabled
  - `purchased_at` string, date-time, required
  - `expires_at` string, date-time, required
  - `days_until_expiry` integer, required: Days until domain expiry
  - `renewal_price` number, nullable, required: What one year of renewal costs in USD at the registrar that holds the domain; renewing N years costs N times this. Null when domani cannot renew the domain or its price is unknown.
  - `payment_method` 'card' | 'x402' | 'crypto', required: How the domain was paid for
  - `payment_tx` string, nullable: On-chain tx hash (USDC payments)
  - `registrant` 'customer' | 'domani' | 'unknown', required: Who the registry lists as the domain's registrant. `customer`: your own contact details (from set_contact). `domani`: Domani's default contact, holding the domain on your behalf until you add yours with set_contact, which makes you the registrant. `unknown`: not checked yet. WHOIS privacy hides the details either way.
  - `transfer_out` object, required: Moving the domain to another registrar. `mode` `api`: get_auth_code returns the code. `manual`: the registrar has no API for it, so Domani's team gets it by hand within 1 business day. null: not available for this domain.
    - `mode` 'api' | 'manual', nullable, required
    - `locked_until` string, date-time, nullable, required: Until when get_auth_code answers TRANSFER_LOCKED (ICANN's 60-day lock after a registration or transfer-in; manual mode)
    - `request` object, nullable, required: The latest transfer code request (manual mode)
      - `status` 'requested' | 'ready' | 'cancelled', required: `requested`: Domani's team is getting the code. `ready`: get_auth_code returns it. `cancelled`: the registrar refused; `note` says why.
      - `requested_at` string, date-time, required
      - `expected_by` string, date-time, nullable, required: When the code will be ready at the latest (status requested)
      - `ready_at` string, date-time, nullable, required
      - `note` string, nullable, required: Why the request was cancelled
  - `registrar_status` 'connected' | 'unavailable' | 'external', required: Whether live registrar data was refreshed or is managed externally
  - `registrar_checked_at` string, date-time, required: When the registrar refresh was attempted
  - `registrar` object, nullable: Domain registration details (null if unavailable)
    - `security_lock` boolean: Whether the domain is locked against transfers
    - `whois_privacy` boolean: Whether WHOIS privacy is enabled
    - `auto_renew` boolean: Auto-renew status
    - `create_date` string: Domain creation date
    - `expire_date` string: Domain expiration date

## Other responses

- `401`: Missing or invalid API key
- `404`: Domain not found
- `429`: Rate limit exceeded - wait and retry

---

[API](https://skmtc.dev/domani/apis/domani-run-api.md) · [All operations](https://skmtc.dev/domani/apis/domani-run-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domani/apis/domani-run-api/revisions/7679f8159533?raw)
