Skip to content

Discovery Paths

An AI agent can enter the RAMP flow through six paths. All paths converge on the same Exchange protocol — the same DiscoverResources, ExecuteTransaction, and ReportUsage RPCs regardless of how discovery happened.

PathEntry PointUse Case
A: Proactive Discoveryramp.jsonAgent checks before accessing content
B: Broker-MediatedBrokerAgent delegates to multi-exchange router
C: Accidental Discovery403 responseWandering bot hits protected content
D: RSL-Firstrsl.txtAgent reads terms, then finds Exchange
E: Batch Multi-URLBrokerAgent needs multiple resources at once
F: SubscriptionExchangeAgent has existing subscription deal

The preferred path. The agent checks /.well-known/ramp.json before attempting to access content. No 403 needed, no wasted requests.

Standards mapping:

StepMessageStandard
Check ramp.jsonProviderManifestRAMP (exchange routing)
Discover supplyResourceQuery / ResourceResponseRAMP wrapping RAMP Requester
Offers returnedOffer with Package + PricingRAMP Pricing + CoMP Package
Content attestationsOffer.attestationsRAMP ResourceAttestation (replaces ResourceAttestation)
Access restrictionsOffer.restrictionsRAMP mapping of RSL permits/prohibits
Execute transactionTransactionRequest / TransactionResponseRAMP (billing_id, signed URL)
Fetch contentSigned URL on CDNRAMP extension (signed URL delivery)
Report usageUsageReportRAMP (mandatory)

The agent delegates to a RAMP Broker, which queries multiple Exchanges in parallel, compares offers, and selects the best deal.

Standards mapping:

StepMessageStandard
Agent to BrokerRAMPRequest with RequestConstraintsRAMP (budget, authorized exchanges)
Broker to ExchangesResourceQuery (parallel fanout)RAMP wrapping RAMP Requester
Offer comparisonOffer.pricing.unit_costRAMP unit cost normalization
Content dedupOffer.identity (canonical_url, content_hash)RAMP ResourceIdentity extension
Content attestationsOffer.attestationsRAMP v1.0 ResourceAttestation
Broker to AgentRAMPResponseRAMP
Usage reportingUsageReport forwarded to winning ExchangeRAMP

Path C: Accidental Discovery via Edge Function (403)

Section titled “Path C: Accidental Discovery via Edge Function (403)”

A wandering bot hits protected content without knowing about RAMP. The edge function on the provider’s CDN blocks it and points to the Exchange.

Standards mapping:

StepStandard
403 + X-Content-Rules headerRAMP extension (discovery mechanism — not in CoMP or RSL)
Exchange endpoint in headerPoints to Exchange listed in ramp.json
All subsequent stepsSame as Path A

The edge function is the “barking dog” — a fallback for bots that did not check ramp.json first.

An agent reads rsl.txt to understand terms, then uses ramp.json to find the Exchange for transacting. RSL tells the agent what it costs; RAMP tells it where to pay.

Standards mapping:

StepStandard
Read rsl.txtRSL 1.0 — terms declaration
Read ramp.jsonRAMP — exchange routing
DiscoverResourcesExchange returns Offers with pricing derived from RSL
Offer.restrictionsMaps RSL permits/prohibits to RAMP AccessRestrictions

The agent needs multiple resources in a single request (e.g., RAG grounding across several sources). The Broker sends all URIs in one ResourceQuery to each Exchange, receives OfferGroups, selects the best offer per URI, and commits all selections in a single batch TransactionRequest.

Standards mapping:

StepMessageStandard
Agent sends multi-URI requestRAMPRequest with multiple URIsRAMP
Broker fans outResourceQuery with multiple URIs (one query per Exchange)RAMP wrapping RAMP Requester
Exchange returns grouped offersResourceResponse.offer_groups[] with OfferGroup per URIRAMP OfferGroup extension
Empty OfferGroup diagnosticOfferGroup.absence_reason (OfferAbsenceReason enum)RAMP v1.0 — per-URI diagnostic when no offers available
Rate limit signalingResourceResponse.rate_limit (RateLimitInfo)RAMP v1.0 — proactive throttling for Broker fanout
Batch transactionTransactionRequest.items[] with TransactionItem per offerRAMP batch extension
Per-item resultsTransactionResponse.items[] with TransactionResultItem per offerRAMP batch extension
Usage reportingOne UsageReport per resource (not per batch)RAMP

When an OfferGroup has no offers, the absence_reason field explains why. This enables agents and Brokers to distinguish “content not in catalog” from “content blocked for your use case” without trial-and-error transactions. Nine reasons are defined: NOT_IN_CATALOG, CONTENT_BLOCKED, FUNCTION_PROHIBITED, GEO_RESTRICTED, USER_CATEGORY_PROHIBITED, TEMPORARILY_UNAVAILABLE, NOT_AUTHORIZED, SCOPE_INSUFFICIENT (requester’s scopes do not cover this resource), UNKNOWN_CRITICAL_EXTENSION (consumer encountered ext_critical keys it does not recognize).

The ResourceResponse carries an optional rate_limit field with the caller’s current rate limit status: limit, remaining, reset_at, and window. This is particularly important for Broker fanout — when an Broker sends batch queries to multiple Exchanges, mid-batch rate limiting can cause partial results if not signaled early. Modeled after IETF RateLimit header fields.

Each OfferGroup carries a discovery_method field indicating how the offers were sourced. Four methods are defined:

ValueNumberDescription
DISCOVERY_METHOD_MARKETPLACE1Standard exchange catalog lookup
DISCOVERY_METHOD_SEARCH2Full-text or semantic search across provider inventories
DISCOVERY_METHOD_RECOMMENDATION3Exchange-generated recommendation based on context
DISCOVERY_METHOD_SYNDICATION4Content syndicated from a partner exchange or feed

This allows agents and Brokers to understand the provenance of each offer group and apply method-specific ranking or filtering logic.

Batch transactions are non-atomic — individual items can fail independently. If one URI’s offer fails authorization, the others proceed.

The agent has an existing subscription deal with a Exchange. When querying supply, the Exchange includes subscription offers with zero marginal cost. The transaction skips per-request billing but still issues a signed URL and creates a usage reporting obligation.

Key points:

  • Subscription detection at query time: The Exchange checks the buyer’s subscription status and includes offers with subscription_id and rate=0.
  • Reporting is still mandatory: Subscription offers carry ReportingObligation.required = true. Providers need consumption data for subscription renewals and content strategy.
  • Quota enforcement: The Exchange checks remaining quota before authorizing subscription transactions. If the subscription’s token quota is exhausted, the subscription offer is not included.
  • Broker preference: The Broker’s selection engine ranks subscription offers above all per-request offers (zero marginal cost). When preferred_exchanges is set and the agent has subscriptions there, those offers get top priority.
  • Financial attribution: The subscription_unit_value field carries the per-unit cost even though cost.amount is 0, enabling prepaid drawdown accounting.