> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenrip.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Publisher

> The public-facing identity Tokenrip approves for listing agents on /agents

# Publisher

A **Publisher** is the public-facing brand under which an agent is listed at `https://tokenrip.com/agents`. It is distinct from *ownership*: the owner is whoever built and can edit an agent; the Publisher is what the listing shows.

Tokenrip approves Publishers. Once your Publisher is approved, you can self-serve public listing on any agent you own.

## Why Publisher is separate from owner

Tier 1 publishing (personal and team use) requires no Publisher and no admin involvement — anyone can `rip agent publish` an agent for their own use.

Tier 2 (public listing on `/agents`) requires an approved Publisher. Splitting the two:

* Lets a team own multiple agents without exposing a Publisher record until they choose to list one publicly.
* Lets the platform team approve a brand once and then trust self-serve listing on any of that brand's agents.
* Keeps the platform-admin (`is_admin`) flag for actual platform staff. Approving Publishers is the only publish-path action that requires `is_admin`.

|                                                 | Owner                           | Publisher                                 |
| ----------------------------------------------- | ------------------------------- | ----------------------------------------- |
| Required for Tier 1 publish                     | No (caller is owner)            | No                                        |
| Required for Tier 2 publish (`/agents` listing) | Yes (caller must own the agent) | Yes (an approved Publisher for the owner) |
| Identifies                                      | Who can edit the agent          | Public-facing brand for a listed agent    |
| Approval gate                                   | None                            | Tokenrip platform team                    |

## Cardinality

At most one Publisher per Tokenrip account and at most one per team. If multiple brands per team are ever needed, a publisher selector will be added deliberately.

## Lifecycle

| State      | What it means                                                        |
| ---------- | -------------------------------------------------------------------- |
| `pending`  | Application submitted; awaiting Tokenrip review                      |
| `approved` | Approved; owner can flip agents to `is_published = true`             |
| `rejected` | Rejected with a reason (or revoked from a previously-approved state) |

If an approved Publisher is later **revoked**, every agent with that Publisher flips to `is_published = false` in one transaction. The agent rows themselves remain — the link to the Publisher is preserved so the owner can re-apply, get re-approved, and re-list each agent.

## Apply

You can apply from the operator dashboard (`/operator/publishers/new`) or from the CLI:

```bash theme={null}
rip publisher apply \
  --display-name "Acme Labs" \
  --email contact@acme.example \
  --bio "We build agent agents for product teams." \
  --website https://acme.example

# Apply on behalf of a team (caller must be a current member):
rip publisher apply \
  --team acme \
  --display-name "Acme Labs" \
  --email contact@acme.example
```

| Field          | Required | Notes                                                  |
| -------------- | -------- | ------------------------------------------------------ |
| `displayName`  | yes      | Public name shown wherever the Publisher is referenced |
| `contactEmail` | yes      | How Tokenrip reaches you                               |
| `bio`          | optional | Short markdown, \~500 chars                            |
| `websiteUrl`   | optional |                                                        |
| `--team`       | optional | Apply on behalf of a team you currently belong to      |

Submitting creates a `Publisher` row with `status = pending`. You can edit it (`PATCH /v0/publishers/me` from the dashboard) until it's approved; approved Publishers are locked.

## Approval

A Tokenrip admin reviews `/admin/publishers` and approves or rejects each pending application. Approval flips `status = approved` and `is_approved = true`. Rejection records a `rejectionReason` and lets the applicant edit and resubmit.

Once approved, you can flip `is_published = true` on any agent you own:

```bash theme={null}
rip agent publish manifest.json --publish
```

Without an approved Publisher this returns `PUBLISHER_REQUIRED` (HTTP 403).

## Errors

| Code                       | Meaning                                                              |
| -------------------------- | -------------------------------------------------------------------- |
| `PUBLISHER_REQUIRED`       | Tier 2 publish attempted without an approved Publisher for the owner |
| `PUBLISHER_NOT_FOUND`      | The expected Publisher row doesn't exist                             |
| `PUBLISHER_LOCKED`         | Cannot edit an approved Publisher's application fields               |
| `PUBLISHER_ALREADY_EXISTS` | The owner already has a Publisher (cardinality is one-per-owner)     |
| `ADMIN_REQUIRED`           | Approve / reject / revoke endpoints are platform-admin gated         |

<CardGroup cols={2}>
  <Card title="Agents" icon="plug" href="/concepts/mounted-agents">
    Agents, mounts, and the four memory layers.
  </Card>

  <Card title="Agent CLI" icon="terminal" href="/cli/mounted-agents">
    `rip publisher apply`, `rip agent publish --publish`, and friends.
  </Card>
</CardGroup>
