Extension: ramp-comp-v1
Purpose
Section titled “Purpose”Maps IAB Tech Lab CoMP (Content Monetization Protocols, V1) fields into RAMP ext conventions. This extension profile enables publishers and ad-tech participants to carry CoMP metadata alongside RAMP transactions without requiring the core protocol to depend on CoMP.
Source of truth (immutable pin): CoMP V1 specification — IAB Tech Lab, finalized 2026-04-28; spec-file blob aa8c796be7a9bcfa1189a1cf6c1ec50aa67a0f5f. The ramp-comp-v1 profile mirrors exactly this revision. (The 1.0-202604 release tag does not carry the spec; main does.)
Exchanges that declare supported_profiles: ["ramp-comp-v1"] include
these ext fields in Offers and expect them in UsageReports.
ext Fields
Section titled “ext Fields”CoMP V1 has no separate License object — all commercial and licensing
terms live on Scope. The keys below mirror the canonical CoMP V1 surface that
comp.proto models 1:1. Enum-valued fields use CoMP’s integer List codes, shown
with their labels; the proto enum each maps to is named in the CoMP field
column.
Resource Metadata (on Offer.ext)
Section titled “Resource Metadata (on Offer.ext)”| Key | Type | Required | CoMP field | Description |
|---|---|---|---|---|
comp.package_id | string | Yes | Package.id | Unique package identifier |
comp.title | string | No | Package.title | Package title (if different from Offer.title) |
comp.seller | string | No | Package.seller | Canonical domain of the content owner |
comp.packager | string | No | Package.packager | Domain of the packager (if different from seller) |
comp.license_url | string | No | Package.licenseurl | URL where the AI system finds the license(s) required to access content |
comp.citation_required | integer | No | Package.citation | Whether citation of the content owner is required (0=no, 1=yes) |
comp.report_url | string | No | Package.reporturl | URL the AI system sends usage reporting to |
Retrieval (on Offer.ext)
Section titled “Retrieval (on Offer.ext)”| Key | Type | Required | CoMP field | Description |
|---|---|---|---|---|
comp.retrieval_endpoint | string | No | Retrieval.endpoint | Entry point / feed URI |
comp.retrieval_auth | integer | No | Retrieval.auth | Authorization type — 0 none, 1 api_key, 2 oauth2, 3 ssl, 4 other |
comp.retrieval_type | integer[] | No | Retrieval.type | Endpoint type(s) — 0 html, 1 rss, 2 api, 3 mcp, 4 nlweb, 5 xml, 6 newsml, 7 other |
Scope (on Offer.ext)
Section titled “Scope (on Offer.ext)”| Key | Type | Required | CoMP field | Description |
|---|---|---|---|---|
comp.scope_type | integer | No | Scope.scope | 0 full_corpus, 1 section, 2 date_range, 3 genre, 4 topic, 5 curated, 6 other |
comp.scope_max | integer | No | Scope.max | Upper limit on crawl (0=unlimited, 1=has maximum) |
comp.content_types | integer[] | No | Scope.ctype | 0 text, 1 video, 2 image, 3 audio, 4 all, 5 other |
Commercial Terms (on Offer.ext)
Section titled “Commercial Terms (on Offer.ext)”Canonical CoMP V1 folds licensing and pricing onto Scope; there is no separate
License object. (This section was previously titled “License on OfferExt”; the
#license-on-offerext anchor is preserved for inbound links.)
| Key | Type | Required | CoMP field | Description |
|---|---|---|---|---|
comp.allowed_use | integer | No | Scope.ause | 0 commercial, 1 non_commercial, 2 educational, 3 government, 4 personal, 5 byo_license, 6 other |
comp.price_type | integer | No | Scope.pricetype | 0 per_use, 1 per_query, 2 per_token, 3 flat, 4 tiered, 5 other |
comp.price_tier | integer | No | Scope.pricetier | Tier identifier when price_type = 4 (tiered) |
comp.unit_price | number | No | Scope.unitprice | Unit price at the given basis |
comp.currency | string | No | Scope.cur | ISO-4217 alpha code; default USD |
comp.countries | integer[] | No | Scope.country | ISO-3166-1 numeric codes where the package may be used |
comp.license_duration_days | integer | No | Scope.licensedur | Days the license is active after the package is delivered |
Usage Functions (on LicenseTerm.restrictions[].ext and Usage.ext)
Section titled “Usage Functions (on LicenseTerm.restrictions[].ext and Usage.ext)”| Key | Type | Required | CoMP field | Description |
|---|---|---|---|---|
comp.function | integer[] | No | AISystemUse.function | 0 all, 1 ai-all, 2 ai-train, 3 ai-input, 4 ai-index, 5 search |
comp.subfn | integer[] | No | AISystemUse.subfn | 0 training, 1 rag, 2 grounding, 3 agent-view, 4 agent-actions, 5 other |
IAB Content Taxonomy (per asset, within Scope.text / video / image / audio)
Section titled “IAB Content Taxonomy (per asset, within Scope.text / video / image / audio)”Each asset object carries its own taxonomy fields:
| Key | Type | Required | CoMP field | Description |
|---|---|---|---|---|
comp.cattax | integer | No | <asset>.cattax | Category taxonomy in use; default 9 (IAB Content Category Taxonomy 3.1) |
comp.cat | integer[] | No | <asset>.cat | IAB content category codes (per cattax) |
comp.language | integer[] | No | <asset>.language | Content language codes |
Conformance
Section titled “Conformance”An Exchange declaring ramp-comp-v1 support MUST:
- Include
comp.package_idon every Offer - Forward
comp.functionfrom the FunctionRestrictionto UsageReport processing - Validate
comp.*ext fields against this profile’s schema
An Agent using ramp-comp-v1 MUST:
- Include
comp.functionin Usage when reporting
Relationship to Core Protocol
Section titled “Relationship to Core Protocol”The core RAMP protocol carries universal fields:
Offer.title— human-readable resource titleLicenseTerm.restrictions[]withkind: RESTRICTION_KIND_FUNCTIONcarryingpermitted/prohibited— string-based (not CoMP enums)Usage.function/Usage.subfn— string-based
The ramp-comp-v1 profile adds CoMP-specific semantics:
comp.package_idlinks to the CoMP package modelcomp.functionvalues map to CoMP Function enum integerscomp.retrieval_*maps to CoMP Retrieval message
Agents and Exchanges that don’t use CoMP simply ignore these ext fields (robustness principle). The core protocol works without them.