Registrar, registrar ID, created/updated/expiry dates, status, nameservers, DNSSEC, and abuse contact, whichever fields the registry actually supplied. A field the registry didn't send is left out, never printed blank. Every date is converted to RFC 3339 first, whichever format the registry sent it in.
Inspect and save results
Look closer at one name, preview a run before it touches the network, or write results out to files. Every flag below with its own sample output.
Prerequisites
reserveinstalled. See Install reserve.- A name or group already in mind. See Check whether a domain name is available.
Registrar details
--detailsboolean$ reserve example.com --details
DOMAIN STATUS SOURCE TIME NOTE
- example.com TAKEN registry 1104ms
registrar: Example Registrar, Inc.
registrar id: 292
created: 2001-08-14T00:00:00Z
updated: 2024-03-02T00:00:00Z
expires: 2027-08-13T00:00:00Z
status: client transfer prohibited
nameservers: ns1.example.com, ns2.example.com
dnssec: signed
abuse: abuse@example-registrar.example
0 available 1 taken 0 unknown (1 checked)A date the registry sends in a format the tool doesn't recognize is passed
through exactly as it arrived, and --json names that field in the registration
record's unparsed_dates list, so you can tell a converted date from a raw one.
Which server answered
--responderbooleanNames the server that answered.
$ reserve example.com --responder
DOMAIN STATUS SOURCE TIME NOTE
- example.com TAKEN registry 1104ms
answered by: rdap.verisign.com
0 available 1 taken 0 unknown (1 checked)DNS records
--dnsbooleanRuns an extra DNS lookup and prints A, AAAA, CNAME, NS, MX, TXT, and SOA
records, one row per type. A type with no answer is marked absent, and a
type the resolver couldn't settle is marked unknown with the reason. No type
is ever left out of the answer.
$ reserve example.com --dns
DOMAIN STATUS SOURCE TIME NOTE
- example.com TAKEN registry 1104ms
a: 93.184.216.34
aaaa: 2606:2800:220:1:248:1893:25c8:1946
cname: absent
ns: ns1.example.com, ns2.example.com
mx: absent
txt: "v=spf1 -all"
soa: ns1.example.com
0 available 1 taken 0 unknown (1 checked)In --json, dns is a list of [type, record] pairs. Each record carries a
state of present, absent, or unknown: a present type also carries
values, and an unknown type also carries a reason.
dnsarray of [string, object]One entry per record type, in the order shown above.
{
"dns": [
["a", { "state": "present", "values": ["93.184.216.34"] }],
["cname", { "state": "absent" }],
["soa", { "state": "unknown", "reason": "timed out" }]
]
}Where to buy an available name
--where-to-buybooleanPrints only for a name that's available: a link to the registry's own page, plus prefilled registrar searches. These are searches, not an offer, and not a claim that a given registrar carries that extension. No price is shown.
$ reserve example-new-startup.io --where-to-buy
DOMAIN STATUS SOURCE TIME NOTE
+ example-new-startup.io AVAILABLE registry 917ms
registry: https://www.iana.org/domains/root/db/io.html
buy at: https://porkbun.com/checkout/search?q=example-new-startup.io
buy at: https://www.namecheap.com/domains/registration/results/?domain=example-new-startup.io
buy at: https://www.dynadot.com/domain/search?domain=example-new-startup.io
buy at: https://www.namesilo.com/domain/search-domains?query=example-new-startup.io
1 available 0 taken 0 unknown (1 checked)Which source answered, and why
--explainbooleanShows which source answered and why, in the order they were tried.
--rawbooleanThe winning source's own unprocessed response.
$ reserve example.com --explain --raw
DOMAIN STATUS SOURCE TIME NOTE
- example.com TAKEN registry 1104ms
tried:
registry (rdap.verisign.com): found a registration record
raw response:
{"objectClassName":"domain","handle":"2336799_DOMAIN_COM-VRSN", ...}
0 available 1 taken 0 unknown (1 checked)--explain and --raw combine: together they show the whole trail plus the
winning source's raw text; --raw alone shows just that raw text. With
--json, these sections carry through as extra fields (dns, registry_page,
buy_at) on each finding.
Everything at once
--fullbooleanTurns on --details, --responder, --dns, --where-to-buy, --explain,
and --raw together. Conflicts with naming any of them individually, so pass
--full on its own.
reserve example.com --fullSee the plan before it runs anything
$ reserve example -g tech --dry-run
Dry run
lookups: 5
names: example
extensions: com, net, xyz, io, app
source: auto
timeout: 10s
pacing: 24 at once, 24 per registry, no fixed rate
writes: nothing
note: no registry was asked, and nothing was writtenreserve example -g tech --dry-run --jsonA dry run asks no registry and writes nothing. It reports the number of lookups, the names and extensions it would check, the source it would use, the timeout and pacing it would keep, and the full path of every file it would write, marking any that's already there.
Save results to files
--savebooleanWrites into the current directory.
-o, --outpathWrites into a directory you name instead. It implies saving on its own, so you
don't also need --save. The two can't be given together.
--jsonbooleanPrints JSON instead of the table on screen, and (combined with --save)
writes the three files as JSON arrays too.
--save-jsonbooleanWrites the files as JSON while the screen keeps its normal table. This is the
difference from plain --json, which changes both. Needs --save or --out.
--appendbooleanMerges into files already there instead of refusing. Needs --save or
--out.
$ reserve example -g tech --save
DOMAIN STATUS SOURCE TIME NOTE
- example.com TAKEN registry 1104ms
+ example.net AVAILABLE registry 842ms
+ example.xyz AVAILABLE registry 917ms
2 available 1 taken 0 unknown (3 checked)
wrote example-available.txt
wrote example-taken.txtreserve example -g tech --out results
reserve example -g tech --save --json
reserve example -g tech --save --append
reserve example -g tech --save --save-jsonResult
Saving never replaces what you see: the table and tally print as usual, and the
files are written as well. A run writes up to three files, one per outcome:
<label>-available.txt, <label>-taken.txt, <label>-unknown.txt (an outcome
with nothing in it writes no file). Pass -a/--available-only and only the
available file is ever produced.
Each file is named after what you searched. Checking one name across many
extensions gives one set of files, since the extension varies and the search
doesn't. Checking several names names the files after the first plus a count:
alpha-and-2-more-available.txt for three names. The full path of every file
written is printed when the run ends.
Only letters and digits survive into the file name, lowercased, with anything else becoming a hyphen, capped at 48 characters. A name written in another script keeps its own letters. A repeat of the same search is refused before the first lookup rather than after the whole sweep:
$ reserve example -g tech --save
error: example-available.txt is already there
try: pass --append to merge into it, or --out <dir> to write somewhere else
code: output.unwritableFiles are written to a temporary file and renamed into place, so an interrupted run never leaves a half-written file, and stopping with Ctrl-C still prints the tally and writes whatever was already learned.
On Linux, macOS, and the BSDs, a result file is created readable by its owner
only, and a directory reserve creates for you is too. A full record carries
the registrar and its abuse contact, and the file names alone say what was
searched for. On Windows, neither carries an access list of its own; both
inherit the rights of the directory you chose.