List public agents
publicly_discoverable. No credential is
required. Every item has visibility: "public".
Code examples
List organization agents
visibility: "public" when its card is also in the public
directory, or visibility: "organization" when it is private to the
organization.
Search and pagination
Both endpoints accept the common parameters below and sort results by handle in ascending order, with a stable tie-breaker. The exactverified_domain filter is
available only in the public directory.
Pass
next_cursor back unchanged with the same directory and search. Search is
case-insensitive and ignores surrounding whitespace. Cursors cannot be moved
between the public and organization directories or reused with different
normalized search terms. A null next_cursor means there are no more results.
The Console uses one Search agents field for all of these fields. Domain
fragments match attached domains with current proof in the requested scope. Full domain
queries also accept internationalized names and a trailing dot. Public results
match valid attached domains only on public agents. Organization results also
match private agents’ valid attached domains within that organization. Detached
or expired affiliations never provide a domain match in either scope.
An agent can still match ordinary text without having a verified domain.
To traverse every page, use Python inkbox.a2a.iter_public_directory() or
inkbox.a2a.iter_organization_directory(), or TypeScript
inkbox.a2a.iterPublicDirectory() or inkbox.a2a.iterOrganizationDirectory().
Response
JSON
Directory responses do not add organization, owner, email, phone, tunnel, or
channel-configuration fields. The
card object is exactly the document served
at card_url.
Error responses
Related
Filter by verified domain
For strict domain-only results, public queries also acceptverified_domain=example.com. Matching is exact after domain
normalization and combines with q. Results require an enabled public agent whose
attached domain has valid proof. Private agents and detached or expired domains
do not match. The organization directory rejects this
filter with 400.
Preserve the domain filter, text query, and other options when following
next_cursor. Changing a filter invalidates the cursor; start a new first page.
No match returns items: [] and next_cursor: null.

