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

# Which domain is which

> Your account's registered domain, your storefront's brand domain, your publisher domains and your public listing domain do different jobs. Only publisher domains are inventory.

A small publisher has one domain doing every job, so the jobs get confused. The moment they differ (a
rebrand, a holding company, a network selling someone else's sites) the difference decides whether
your storefront can go live.

| Domain                    | What it answers                                   | Where it lives                                                               |
| ------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------- |
| **Registered domain**     | Which account is this, and do we know you own it? | The account (`customerDomain`), usually from the email you signed up with.   |
| **Brand domain**          | Who is selling, commercially?                     | The storefront's `operatorDomain`; name and logo come from its `brand.json`. |
| **Publisher domains**     | What inventory is being sold?                     | The storefront's business profile (`publisherDomains`).                      |
| **Public listing domain** | Where is the public listing served?               | The storefront's discovery hostname, on your own domain.                     |

Only publisher domains are inventory. Your brand domain is never a product's coverage.

## Registered domain

Set on the account (see [Accounts and organizations](/guides/accounts#registered-domain)). It's
**verified** when it matches an admin's verified email domain, or when Semicola staff approve it;
otherwise it stays **pending**.

## Brand domain

The brand domain is your buyer-facing identity, so it isn't taken on assertion. Set it from the
**Listing** page or with `set_storefront_operator_domain`. Semicola reads the domain's `brand.json`
for your name and logo. Until it verifies, the **Brand domain** readiness check (`operator_domain`)
stays partial.

### It matches your registered domain

Once the registered domain is verified, a brand domain equal to it verifies automatically. If it's
still pending, chase the registered domain, not the brand domain.

### It differs

A rebrand, an alias or a holding company. Two things must hold, in order:

1. **Your registered domain is verified.** Nothing gets around this.
2. **Published evidence links the two domains.** Either domain's `brand.json` lists the other in
   `authorized_operators`, or both resolve to the same house brand.

<Warning>
  A website redirect isn't ownership proof. Pointing `old.com` at `new.com` verifies nothing; the
  evidence has to be published in `brand.json`.
</Warning>

### Changing it

* Setting a **new** brand domain re-runs verification from scratch.
* Re-saving the **same** domain changes nothing, so a profile update can't un-verify you.
* Lookups fail closed: if the `brand.json` lookup fails, the result is "not verified". Re-save the
  domain to retry.

Each change is recorded in the storefront's activity.

### When it stays pending

1. Is the registered domain verified? Nothing else can succeed first.
2. Does the brand domain match it? If so, step 1 is the blocker.
3. If it differs, is the linking evidence published in `brand.json`?

## Publisher domains

`update_business_profile` sets `publisherDomains` (up to 128) along with the rest of your business
profile. The **Publisher domains** readiness check needs a publisher domain on the storefront, and
**Publisher authorization** checks it against the brand registry. When your catalog lists a
publisher domain that isn't yours, **Product publisher domains** turns partial and names it.

## Public listing domain

Separate from all of the above: the hostname where your public listing is served.

1. Publish the listing on the marketplace (`publish_discovery` with `visibility: "marketplace"`).
2. Save the hostname with `save_discovery_hostname` (`hostname`, like `listing.example.com`; replace
   an existing one with `confirmReplace`, or pass `null` to remove it). It returns the one CNAME
   record to add at your registrar.
3. Verify with `activate_discovery_hostname`. It reads the routing proof the hostname serves at
   `/.well-known/semicola-discovery-registration`. Verifying never publishes.
4. Make it public with `publish_discovery` and `visibility: "public"`.

This needs the Distribution package on your plan. A scheduled re-check reads every active listing
domain's proof again; after a failure, serving continues until the last pass expires, then public
serving stops until you re-verify. Unlisting from the marketplace stops it at once.

## Not available yet

* Brand-hierarchy evidence from an external registry: linking evidence is `brand.json` only.
* Staff review of pending linking evidence, and asking Semi to file that review for you.
* `adagents.json` authorization per publisher domain: **Publisher authorization** checks the
  brand registry, not each domain's `adagents.json`.

## Related

* [Identity documents](/concepts/identity-documents)
* [Seller onboarding](/sell/onboarding)
