Skip to main content
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. Only publisher domains are inventory. Your brand domain is never a product’s coverage.

Registered domain

Set on the account (see Accounts and organizations). 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.
A website redirect isn’t ownership proof. Pointing old.com at new.com verifies nothing; the evidence has to be published in brand.json.

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.