---
title: "Every open door, plus the hub block"
method: GET
path: "/agent/directory"
tags: ["discovery"]
---

# Every open door, plus the hub block

`GET /agent/directory`

## Request

- Base URL: `https://api.bubblio.dev`
- URL: `https://api.bubblio.dev/agent/directory`
- Auth: none declared

Lists doors whose owners opened them (approved accounts with the door enabled)
AND chose to be listed — an owner may run an unlisted door that works for anyone
holding its doorId/MCP URL but appears nowhere here (and does not rank in the
hub's `find`, nor resolve by handle). Absence from this list therefore never
proves a door does not exist.
Paid actions ride each entry so agent builders can price-shop without knocking.
A transient read failure degrades to an honest empty `doors` list — never a 500;
the `hub` block is served regardless.

## Response `200`

The directory.

- object
  - `hub` object, required: Where the one-connector hub lives (mcp/llms/manifest URLs).
  - `feed` object, required: Where the ACP-compatible feed lives (url + note) — the same listed doors as product-feed rows, for crawlers without an MCP client.
  - `doors` object[], required
    - `doorId` string, required
    - `label` string, required
    - `handle` string, required: How the hub addresses this door by argument. DERIVED from the label (never stored) — an owner's label edit renames it; the doorId is the name that never moves.
    - `blurb` string
    - `manifest` string, uri, required
    - `mcp` string, uri, required
    - `paid_actions` object[]: Present only when the door has priced actions.
      - `name` string, required
      - `price` string, required

---

[API](https://skmtc.dev/bubblio/apis/bubblio-agent-door-api.md) · [All operations](https://skmtc.dev/bubblio/apis/bubblio-agent-door-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bubblio/apis/bubblio-agent-door-api/revisions/d858aff9c01d?raw)
