> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-fix-release-bump-classification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Registering an agent

> How agents appear in the AAO registry — the single enrollment path and what AAO membership unlocks.

The AdCP registry catalog (`/api/registry/agents`, `/api/registry/publishers`) contains only AAO-attested, member-enrolled agents. To appear in the catalog, an AAO member must explicitly enroll the agent on their member profile.

## How agents end up in the registry

There is one path: **an AAO member adds the agent to their member profile** via the dashboard or `PUT /api/me/member-profile`. End-to-end via the dashboard: under five minutes.

1. **Sign in or sign up.** Go to [agenticadvertising.org/auth/login](https://agenticadvertising.org/auth/login). New here? Use **Sign up** to create your account, then accept your AAO organization invite (or [start a membership](https://agenticadvertising.org/membership) if your org isn't on AAO yet).
2. **Open the agents dashboard.** Once signed in, go to [agenticadvertising.org/dashboard/agents](https://agenticadvertising.org/dashboard/agents). The URL auto-resolves your org context.
3. **Click `+ Register agent`** in the top-right of the page. (On a brand-new org with no agents yet, the empty-state CTA reads **Register your first agent** and triggers the same flow.)
4. **Talk to Addie.** The button drops you into chat with Addie pre-loaded with the prompt *"Help me register my agent."* Addie will walk you through:
   * **Agent URL** — e.g. `https://agent.yourcompany.com/mcp`
   * **Display name** (optional)
   * **Auth method** — pick one: None · Static bearer · Static basic · OAuth client credentials. *(Interactive OAuth user authorization is configured separately — register with **None** here, then click **Authorize** on the agent card to sign in.)*
   * **Auth fields** — only the ones your chosen method needs (bearer token, or `token_endpoint` + `client_id` + `client_secret` for client credentials, etc.)
   * **Protocol** — defaults to MCP; Addie asks only if your URL is ambiguous
5. **Done.** Addie calls `save_agent` and your agent lands in the registry catalog with `visibility: "members_only"` (visible to other paying AAO members — Professional, Builder, Member, or Leader; not publicly listed).
6. **Optional — go public.** Back on `/dashboard/agents`, change the agent's visibility from **Members only** to **Public**. Public visibility requires a paid AAO tier (Professional, Builder, Member, or Leader) and a primary brand domain on your member profile so the agent can be added to your `brand.json`.

**Type is resolved server-side.** You will not be asked for the agent's type — type (`brand`, `sales`, `buying`, `measurement`, `creative`, `signals`, etc.) is resolved from the agent's capability snapshot. `resolveAgentTypes()` reads the most recent snapshot from the crawler; if no snapshot exists yet, the type field saved is whatever the client supplied, and the next crawler probe overwrites it. Either way, you can't pin a wrong type permanently.

**What this path attests:** the member has signed AAO terms; the URL, name, and contact are explicitly declared; the type is probe-verified. Visibility can be `public`, `members_only`, or `private` — see [Visibility](#visibility) below.

There is no auto-population from crawled `adagents.json` files. Agents listed in third-party `adagents.json` files populate the publisher-authorization graph used by the Operator lookup endpoint (`GET /api/registry/operator?domain=X`), `/api/registry/lookup/domain`, and `hasValidAdagents`, but they do not create catalog entries.

## Programmatic registration (for CI, scripts, agents)

To register agents from CI, a deploy hook, or your own agent — without the dashboard or Addie — use the per-agent REST endpoints under `/api/me/agents`. They share the same visibility gate, server-side type resolution, and audit log as the dashboard path, so the `members_only` default, the `tier_required` check on `public`, and the type smuggle-protection all apply identically.

Authenticate with a WorkOS API key (`Authorization: Bearer sk_…`) or an OAuth user JWT. Mint an API key under [agenticadvertising.org/dashboard/api-keys](https://agenticadvertising.org/dashboard/api-keys).

| Endpoint                      | Purpose                   |
| ----------------------------- | ------------------------- |
| `GET /api/me/agents`          | List my registered agents |
| `POST /api/me/agents`         | Register an agent         |
| `PATCH /api/me/agents/{url}`  | Update an agent           |
| `DELETE /api/me/agents/{url}` | Remove an agent           |

The path parameter on PATCH and DELETE is the agent's `url`, URL-encoded (e.g. `https%3A%2F%2Fagent.example.com%2Fmcp`). `POST` is idempotent on `url`: new entries return `201`; re-posting the same `url` updates the existing entry and returns `200`. Each successful write returns `{ agent, warnings? }` — `warnings` lists any tier-driven visibility downgrades (e.g. an Explorer-tier caller asking for `public` is stored as `members_only` with a `visibility_downgraded` warning).

### Prerequisites

* An AAO member profile must already exist for your organization. Create one via the dashboard or `POST /api/me/member-profile` first; the agent endpoints return `404` until then.
* For `visibility: "public"`, your organization needs a paid AAO tier (Professional, Builder, Member, or Leader) and a `primary_brand_domain` set on the profile so the agent can be added to your `brand.json`. See [Visibility](#visibility) below.

## What this means if you are not an AAO member

You cannot self-register today. Your operator must be an AAO member to enroll your agent in the registry catalog.

Crawl-discovered listings (your agent referenced in someone's `adagents.json`) populate the authorization graph used for property-authorization checks but do not create a catalog entry — `/api/registry/agents` is members-only.

[Become a member](https://agenticadvertising.org/membership) to access the registration path.

## Visibility

Member-enrolled agents have one of three visibility levels:

| Visibility     | Who sees it                                                                              |
| -------------- | ---------------------------------------------------------------------------------------- |
| `public`       | Anyone — anonymous calls to `/api/registry/agents` and `/api/registry/operator?domain=X` |
| `members_only` | AAO API-tier members on `/api/registry/operator?domain=X`                                |
| `private`      | Profile owner only                                                                       |

The `/api/registry/operator?domain=X` endpoint is auth-aware: anonymous callers see only `public` agents; authenticated AAO API-tier callers see `members_only` agents; profile owners additionally see `private` agents.

## Membership benefits

| Capability                              | Description                                       |
| --------------------------------------- | ------------------------------------------------- |
| Catalog visibility                      | Your agent appears in `/api/registry/agents`      |
| Self-attest type, name, contact         | You declare and edit the agent's identity         |
| Edit your own listing                   | Profile owner controls all fields                 |
| `members_only` and `private` visibility | Scope agent visibility beyond `public`            |
| AAO Verified badge                      | Eligible after passing storyboards                |
| Storyboard test access                  | Run protocol-conformance tests against your agent |
| Compliance reporting                    | Reports against your agent's protocol use         |
| Trust signal to consumers               | "Member of AAO; signed terms; attested"           |

[Become a member](https://agenticadvertising.org/membership) to access the registered path.

## Verifying how your agent appears

Query the registry directly:

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://agenticadvertising.org/api/registry/agents" \
    | jq '.agents[] | select(.url == "https://your-agent-url.example/mcp")'
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch("https://agenticadvertising.org/api/registry/agents");
  const { agents } = await res.json();
  const yours = agents.find((a) => a.url === "https://your-agent-url.example/mcp");
  console.log(yours);
  ```
</CodeGroup>

If your agent's URL is in the response, it is enrolled and `member` identifies the AAO organization that owns the listing. If it is not in the response, no AAO member has enrolled it — ask your operator to enroll it via their member profile, or [become a member](https://agenticadvertising.org/membership) and self-enroll.

To check whether your agent is referenced in a publisher's `adagents.json` (for authorization purposes, separate from catalog enrollment), call `/api/registry/lookup/domain/{domain}` against the publisher's domain.

## Related

* [Registry overview](/docs/registry) — endpoint catalog, lookup flows, and brand resolution.
* `GET /api/registry/operator?domain=X` — auth-aware per-entity view of agents and authorizations.
* `GET /api/registry/agents` — full registry catalog.
* `POST /api/registry/crawl-request` - refresh a publisher's `adagents.json` mapping in the authorization graph.
