You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Following up on this #20 monetization signaling in ARD entries with a fleshed-out design so we have something concrete to react to. Scoped to access/monetization only — auth-feasibility signaling is kept out (see "Out of scope" below), per @zeroasterisk & @darrelmiller's point that auth hints at the discovery layer are a separate discussion.
Design principle: ARD signals, it doesn't transact
accessModelcommunicates a coarse access signal; registries and clients judge and act — same shape as the trust model, consistent with §3.6 Separation of Concerns. Authoritative commercial terms live behind pricingUrl / in the resource's native card. Any structured price echoed into the entry is an optional, non-authoritative cache for filtering — ARD does not become a billing spec. §4.5 Description Vocabulary already names pricing as a legitimate filter dimension; this just gives it a small, named, interoperable shape.
Vendor-neutral pointer that the resource is transactable via a marketplace; marketplace + opaque productRef (ARD does not interpret them).
* required only when the object is present; the object is optional on the entry.
tier: negotiated deliberately separates self-serve-payable from needs-a-deal (price not public / private offer). price.unit, negotiated, and mediation are intentionally abstract so any marketplace or SaaS vendor can instantiate them without their model being baked into the spec.
How a client uses it
Filter (prefer free/freemium; exclude negotiated for an autonomous run that can't complete a sales motion) or rank (bias toward affordable/covered) before selection — avoiding the select-then-402 dead end. Suggest adding an optional accessTier to the Appendix A structured filters.
Why entry (not card)
The coarse gate must be filterable without fetching the artifact, so it belongs in the entry the registry indexes. The optional richer terms stay in the same object (framed as a non-authoritative echo of pricingUrl/the native card) to avoid a second lookup. This matches the pattern in ai-catalog issue #63 and ai-catalog issue #65 — optional structured objects on the entry, justified by a discovery-time decision.
Out of scope
Auth-feasibility (authHint) — supported auth schemes / DCR / on-behalf-of at discovery time. Separate concern; worth its own issue. (Note Spec Proposal: Dependencies manifest #63 already carries identityType: "OBO" on dependencies — an existing discovery-time auth-feasibility signal.)
Entitlement / "covered" state — whether this buyer is already covered is buyer-specific and runtime-resolved, which fights the static-manifest model. Deferred as the runtime complement to this discovery-time signal.
Open questions
Is 5 the right granularity for tier? Is negotiated distinct enough to keep?
Keep price/freeTier in the entry (as non-authoritative echo), or stop at tier+paymentProtocol+pricingUrl and defer structured terms to the card?
Following up on this #20 monetization signaling in ARD entries with a fleshed-out design so we have something concrete to react to. Scoped to access/monetization only — auth-feasibility signaling is kept out (see "Out of scope" below), per @zeroasterisk & @darrelmiller's point that auth hints at the discovery layer are a separate discussion.
Design principle: ARD signals, it doesn't transact
accessModelcommunicates a coarse access signal; registries and clients judge and act — same shape as the trust model, consistent with §3.6 Separation of Concerns. Authoritative commercial terms live behindpricingUrl/ in the resource's native card. Any structured price echoed into the entry is an optional, non-authoritative cache for filtering — ARD does not become a billing spec. §4.5 Description Vocabulary already names pricing as a legitimate filter dimension; this just gives it a small, named, interoperable shape.Proposed field (optional, on the Catalog Entry §4.2)
Only
tieris required when the object is present; everything else is optional (a publisher can say as little as{"tier": "free"}).tierfree|freemium|subscription|paid|negotiated. Primary filterable/rankable signal.paymentProtocolx402,marketplace.pricingUrlprice{ amount, currency, unit }.price.unitper_call|per_token|per_seat|per_month|flat.freeTier{ unit, quantity }.mediationmarketplace+ opaqueproductRef(ARD does not interpret them).*required only when the object is present; the object is optional on the entry.tier: negotiateddeliberately separates self-serve-payable from needs-a-deal (price not public / private offer).price.unit,negotiated, andmediationare intentionally abstract so any marketplace or SaaS vendor can instantiate them without their model being baked into the spec.How a client uses it
Filter (prefer free/freemium; exclude
negotiatedfor an autonomous run that can't complete a sales motion) or rank (bias toward affordable/covered) before selection — avoiding the select-then-402 dead end. Suggest adding an optionalaccessTierto the Appendix A structured filters.Why entry (not card)
The coarse gate must be filterable without fetching the artifact, so it belongs in the entry the registry indexes. The optional richer terms stay in the same object (framed as a non-authoritative echo of
pricingUrl/the native card) to avoid a second lookup. This matches the pattern in ai-catalog issue #63 and ai-catalog issue #65 — optional structured objects on the entry, justified by a discovery-time decision.Out of scope
authHint) — supported auth schemes / DCR / on-behalf-of at discovery time. Separate concern; worth its own issue. (Note Spec Proposal: Dependencies manifest #63 already carriesidentityType: "OBO"on dependencies — an existing discovery-time auth-feasibility signal.)Open questions
tier? Isnegotiateddistinct enough to keep?price/freeTierin the entry (as non-authoritative echo), or stop attier+paymentProtocol+pricingUrland defer structured terms to the card?accessTierto Appendix A filters?accessModelvs.accessvs.commercialTerms?