The .agent namespace
A name people can actually say.
.agent name that resolves to it..agent name means what https://fixr.nexus/api/resolve says it means — and nothing more. It will not load in a browser address bar, it is not an ICANN top-level domain, and it is not recorded on chain. If Fixr stops answering, the name stops resolving.Resolving one
The resolver is a plain GET. No key, no rate limit worth mentioning, CORS open — anything that wants to resolve a name can.
$ curl 'https://fixr.nexus/api/resolve?name=yourproject'
{
"name": "yourproject.agent",
"valid": true,
"resolved": true,
"registered": true,
"mint": "7xKq2mPvR4nT8wLbYc3ZfHjD5sQe1UgA9vagent",
"registeredAt": 1755820000000
}Reverse lookups work too — every name pointing at a mint:
$ curl 'https://fixr.nexus/api/resolve?mint=7xKq…agent'
{ "mint": "7xKq…agent", "names": ["yourproject.agent"], "count": 1 }What makes a valid name
Lowercase a-z, digits and hyphens. 3 to 32 characters. No leading, trailing or doubled hyphens.
Deliberately narrower than a domain name: no Unicode at all. Not because it would be hard to support, but because аgent written with a Cyrillic а is a different string that renders identically to agent in every interface that will ever display it. A namespace where two names can look the same is a namespace built for impersonation, so names normalise to plain ASCII or they are refused.
A short list of names is reserved — fixr, api, admin, support and similar — for the same reason.
Status codes
Four outcomes, and they are four different responses on purpose. An unregistered name is a 404. A malformed one is a 400 with the reason. A resolver that cannot reach its store returns 503 — never an empty result, because a caller that treats absence as fact would read an outage as “this name is free”.