Skip to content
↑↓ to move · Enter to openEsc to close
Release notes · dns · openapi · release notes

One DNS probe, three deleted routes and an OpenAPI document that covers every route

Shipped · commits 3566e04, fb6609a

This release is mostly subtraction. The _agenid TXT check existed in three places and provider detection in two, and the copies had already drifted apart in ways that would have failed silently. There is now one probe, packages/web/lib/dns-probe.ts, three superseded routes are gone, and the OpenAPI document describes all 13 deployed routes instead of 4.

It also fixes a key-document check that reported verified for any successful HTTP answer, including a web page. Nothing here changes what AgenID issues. Domain control is evidence, not a level, and the ceiling is unchanged: The reference deployment at agenid.com issues nothing above L1_REGISTERED today: L2 and higher require a VerificationAssertion signed by a root authority key, and that key has not been created yet. L5 is reserved and is not issuable at all.

How three copies drifted

The duplication had already become a correctness defect, in three ways, none of which would have produced an error.

  • Two routes built the TXT record value from their own local prefix constant instead of calling verificationRecord(). A change to the record's shape would have left them checking DNS for a value AgenID no longer asks for, matching nothing, forever.
  • /api/verify-dns carried the disclosure that domain control is evidence and not a level. Its byte-for-byte twin /api/dns/verify did not, so an honesty rule was enforced on one copy of the same endpoint.
  • /api/dns/detect did spec-literal Domain Connect discovery with no GoDaddy fallback, so two endpoints disagreed about whether the same domain supported one-click setup.

What was deleted, and why one deletion matters more

POST /api/dns/verify was a copy of POST /api/verify-dns. POST /api/dns/detect duplicated provider detection that POST /api/domain/status does better. POST /api/dns/auto-add held a Cloudflare or GoDaddy API credential and wrote to the operator's zone.

The last one was deleted rather than left unconfigured, and that is the substantive decision. A credential-holding write path sitting idle in the tree invites a future session to finish it. AgenID does not hold write access to customers' DNS zones; that credential is exactly what the product argues against. A test now forbids any source file in packages/web from reading a DNS provider's API credential or calling a provider write API, and the whole /api/dns namespace must stay empty.

The new guard then found two more copies that a search had missed, in the UI layer. DomainFlow fell back to a hand-built record value before the first server response arrived, so an operator could have copied and published a stale record and waited forever. Every cell of that record table now comes from the same builder the server uses.

The key-document probe no longer says verified

POST /api/domain/status also reports whether the operator publishes a key document at its .well-known path. It used to report verified whenever the operator's server answered 2xx. Most single-page-app hosts answer every unknown path with 200 text/html and the homepage, and the operator domain of AgenID's own pilot does exactly that, so its homepage was reported as a verified key document, live.

key_discovery.status is now absent, invalid, published or unreachable. published requires a 2xx application/json body, read to at most 64 KiB, that parses as a strict KeysDocument naming the probed domain as controller_domain. invalid carries a reason. Verified is deliberately not a state: the probe knows a domain, not an agent, and never compares keys against the registry. That comparison is the verifier's job. A new suite of 24 tests reproduces the single-page-app response end to end and was shown to fail against the old implementation.

Separately, POST /api/verify-dns stopped echoing caller input when the resolver fails. Its 502 body now returns fixed text plus the error code.

An OpenAPI document that describes every route

The OpenAPI document now covers 13 deployed routes, up from 4. The old rule was never to document a route that does not exist. The new half of the rule exists because omission is a claim too: a contract describing 4 of 13 routes told a security reviewer that two unauthenticated write paths, a credential-forwarding proxy and two outbound DNS amplifiers did not exist.

packages/web/test/dns-surface.test.ts now fails on a route handler with no documented path and on a documented path with no handler. The documentation check additionally asserts that the three deleted routes return 404 in production, because a claim that passes whether a route was deleted or merely undocumented is a claim nobody is checking.

What this does not do, and how to try it

One behavioral difference remains, on purpose: a resolver failure is 502 on /api/verify-dns, which answered a direct question, and pending on /api/domain/status, which will ask again in six seconds. None of these endpoints returns a verification level. Which agent is acting is not the same question as what it is allowed to do. AgenID answers the first. Protocol v1.1.1 defines no signed authorization object, so permission stays with the operator and with the party on the other side.

Fetch https://www.agenid.com/api/v1/openapi.json to see every deployed path. To see the probe from the operator's side, open domain verification and enter a domain you control.

Frequently asked questions

Does publishing an _agenid TXT record raise my agent's level?

No. It records evidence of domain control and nothing more. The reference deployment at agenid.com issues nothing above L1_REGISTERED today: L2 and higher require a VerificationAssertion signed by a root authority key, and that key has not been created yet. L5 is reserved and is not issuable at all.

Why was the DNS auto-add route deleted instead of disabled?

It held a DNS provider credential and wrote to the operator's zone. AgenID does not hold write access to customers' DNS zones, and an unconfigured write path invites someone to finish it later. One-click setup goes through Domain Connect, where the operator authorizes the record at its own provider.

What does published mean for a key document?

It means the operator's domain served a strict, parseable key document that names that domain as its controller. It does not mean the key matches the registry. A verifier compares the two copies itself.

What agenid.com issues today

The reference deployment at agenid.com issues DECLARED and L1_REGISTERED only. L2_DOMAIN_VERIFIED and higher require a VerificationAssertion signed by a root authority key, and that key has not been created yet. L5 is reserved by the specification and is not issuable at all.

Identity is not permission

Which agent is acting and who declared it is one question. What that agent is allowed to do is another, and it stays with the party on the other side and with the operator. Protocol v1.1.1 defines no signed authorization object.

Give your agent an identity

Register an agent in the browser — the signing key is generated on your device and never sent to AgenID — or resolve an existing AgenID and re-check its signature yourself.