Canonical definition

Authority Binding in UCP – Definition and Algorithm

UCP authority binding is the rule that a UCP entity may only declare a schema URL served from a host the entity’s own namespace authority controls. A platform derives the authority by reversing the URL’s hostname labels and checking it against the entity’s reverse-domain name. If the check fails, the platform must not fetch the schema and must reject the entity – treating it as if it were never declared. Introduced as a MUST in UCP 2026-08-25.

In one sentence

Proof that whoever published a capability actually owns the domain its name claims – enforced by reversing the schema URL’s hostname, not by matching strings.

Why it exists

UCP capability names encode governance in the name itself: dev.ucp.shopping.checkout is governed by ucp.dev, com.example.payments.installments by example.com. Without a check, anyone could publish an entity under any namespace and point its schema anywhere.

The binding establishes provenance, not trust. A valid binding proves only that the name is controlled by the party serving the schema. It says nothing about whether the entity is correct, safe or worth supporting – that remains the client’s decision.

The algorithm

For an entity named name declaring a schema URL, a platform must:

  1. Parse the URL with a conformant URL parser. It must parse, must use https, and must not contain userinfo. Substring matching on the raw URL is not permitted.
  2. Require a registered domain of at least two labels. IP literals and single-label hosts are not authorities.
  3. Take the hostname without the port, lowercase it, strip a trailing dot, convert internationalized domains to punycode, and reverse its labels – host ucp.dev becomes authority prefix dev.ucp.
  4. Accept if and only if name equals the authority prefix (exact), or name begins with the authority prefix followed by a . (label-aligned prefix).
The separating dot is the whole point

Requiring a . immediately after the authority prefix keeps the match on a label boundary. Without it, com.example (host example.com) would match com.examplecorp.* – a textual prefix of a namespace someone else owns.

Accept and reject table

Entity nameschema hostAuthority prefixResult
dev.ucp.shopping.checkoutucp.devdev.ucpaccept – prefix
dev.ucp.shopping.checkoutshopping.ucp.devdev.ucp.shoppingaccept – prefix
com.example.payments.installmentsexample.comcom.exampleaccept – prefix
com.example.paypay.example.comcom.example.payaccept – exact
com.example.payexample.comcom.exampleaccept – prefix
com.example.payevil.exampleexample.evilreject
dev.ucp.shopping.checkoutevil.exampleexample.evilreject
com.examplecorp.payexample.comcom.examplereject – not label-aligned
com.example.paycdn.example.comcom.example.cdnreject – shared CDN

The userinfo decoy

The specification calls this case out by name, because it is the one a naive implementation gets wrong:

https://ucp.dev@evil.example/checkout.json

The string contains ucp.dev. The host is evil.example. Any check written as str_contains($url, 'ucp.dev') accepts a schema served by an attacker. This is why the rule mandates a real URL parser and forbids userinfo outright.

What is bound and what is not

FieldRule
schemahttps, and authority-bound. This is the machine trust path – the platform fetches and composes it during negotiation
spechttps only. Documentation is off the trust path, so a docs subdomain or third-party host is legitimate
endpointhttps. Not authority-bound – it is your own store URL

This split is new in 2026-08-25. Implementations written against 2026-04-08 often bound the spec URL too, which now produces false rejections.

Public suffixes are not special-cased

The check does not consult the Public Suffix List. A suffix under which independent parties can register names – from co.uk to github.io, object storage and app platforms – is treated as an ordinary authority, so co-tenants satisfy the same prefix. Declare entities only under a registrable domain you exclusively control.

Why merchants should check this locally

Rejection is silent

A platform that rejects an entity treats it as not present and never activates it. Nothing is logged on your side, no error is returned, and the capability simply does not exist as far as that agent is concerned. A store can pass JSON Schema validation and still lose half its declared capabilities.

angeo/module-ucp runs the derivation algorithm over every capability, service binding and payment handler in the generated profile:

bin/magento angeo:ucp:validate

Questions

What is authority binding in UCP?
The requirement that an entity’s schema URL is served from a host whose reversed labels are the entity’s name or a label-aligned prefix of it. It proves the publisher controls the namespace the name claims.
Does authority binding apply to the spec URL?
No. Since 2026-08-25 only schema is bound. A spec URL must be https but may be served from any host, because documentation is deliberately off the machine trust path.
What happens if authority binding fails?
The platform must not fetch the schema and must reject the entity, treating it as not present. The rejection is silent, so nothing reaches the merchant.
Can I host my UCP capability schema on a CDN subdomain?
Only if the subdomain’s reversed labels line up with the namespace. cdn.example.com reverses to com.example.cdn, which is not a prefix of com.example.pay, so it is rejected.
Does authority binding mean a capability is trustworthy?
No. It establishes provenance only. Whether to negotiate, trust or implement the entity remains the client’s decision.

Related

Verified 28 August 2026 against the official specification repository at tag v2026-08-25 – the “Namespace Governance → Authority Binding” section of the overview. The accept/reject table follows the specification’s own published table. Disclosure: we publish the open-source UCP modules referenced above.