Skip to content

Extension: ramp-news-v1

RAMP-News v1 defines a standardized vocabulary of ext field keys for news, media, and podcast content traded through RAMP Exchanges. It enables agents and Brokers to:

  • Discover news resources by article type, topic, urgency, and publication date
  • Evaluate offers using editorial metadata (corrections, retractions, embargo status)
  • Verify content provenance through syndication chain tracking
  • Handle the news content lifecycle (corrections, updates, kills)
  • Access podcast episodes with transcript, chapter, and format variant metadata

This profile is built entirely on existing industry standards: IPTC NewsML-G2, IPTC NewsCodes, Schema.org, RSS 2.0, Podcasting 2.0, W3C TDMRep, and ODRL/RightsML. No field names are invented when an industry standard already defines one.

  • Exchanges serving news publishers, wire services, podcast networks, or broadcast media
  • Brokers that need to filter, rank, or deduplicate news content across Exchanges
  • Agents that consume news articles, podcast episodes, or broadcast content via RAMP

Implementers must be familiar with:

  • RAMP protocol (proto/ramp/v1/ramp.proto)
  • The ext field mechanism (google.protobuf.Struct on all major messages)
  • ResourceIdentity, ResourceMutability, and ResourceAttestation messages

An Exchange declares support for this profile by including "ramp-news-v1" in its ExchangeManifest.supported_profiles array:

{
"ver": "1.0",
"domain": "news-exchange.example.com",
"name": "Example News Exchange",
"supported_profiles": ["ramp-news-v1"],
"exchange_endpoint": "https://news-exchange.example.com/ramp/v1",
"keys_uri": "https://news-exchange.example.com/ramp/v1/keys"
}

Brokers use supported_profiles to route news-specific queries to Exchanges that understand this vocabulary.


This profile defines 36 unique field names across 6 protocol messages (44 field placements total, as some fields like news.article_type appear in both query and offer). Every field is namespaced with news. and traces to an existing industry standard.

MessageField CountPurpose
ResourceIdentity.ext3Cross-exchange news resource identification
ResourceQuery.ext7News-specific query parameters
Offer.ext23News metadata on resource offers (14 article + 9 podcast)
ResourceAttestation.claims5News-specific attestation claims
DisputeRequest.ext3News dispute evidence
ExchangeManifest.ext3Exchange news capabilities

Identity Vocabulary (ResourceIdentity.ext)

Section titled “Identity Vocabulary (ResourceIdentity.ext)”

These fields enable cross-exchange deduplication of news resources. A Broker querying three Exchanges for the same AP wire story can match offers by news.iptc_guid.

KeyTypeRequiredSource StandardDescription
news.iptc_guidstringConditionalIPTC NewsML-G2 @guidIPTC globally unique identifier in URN format. Present when content originates from or flows through wire services (AP, Reuters, AFP). Format: urn:newsml:{provider}:{date}:{id}.
news.podcast_guidstringConditionalPodcasting 2.0 podcast:guidUUIDv5 globally unique podcast identifier. Present for podcast series. Generated from feed URL using namespace UUID ead4c236-bf58-58c6-a2c6-a6b28d128cb6. Follows the podcast even if feed URL changes.
news.rss_guidstringOptionalRSS 2.0 <guid>RSS item GUID. Often a permalink URL. Used by aggregators to detect new vs. updated items.

Usage note: These fields supplement, not replace, ResourceIdentity.canonical_url (which is always present). For wire-service content, news.iptc_guid is the stable cross-exchange key because the canonical URL differs per publisher. For podcasts, news.podcast_guid identifies the show; the episode is identified by canonical_url (episode page) or the enclosure URL.


Agents use these fields to express news-specific query parameters. The Exchange filters its catalog accordingly.

KeyTypeRequiredSource StandardDescription
news.article_typestringOptionalSchema.org NewsArticle subtypesFilter by article type. Values: reportage, analysis, opinion, review, background, satirical, live_blog. Maps to Schema.org types (ReportageNewsArticle, AnalysisNewsArticle, etc.).
news.media_topicstring[]OptionalIPTC NewsCodes mediatopic:Filter by IPTC Media Topic QCodes. Hierarchical taxonomy with ~1,200 terms. Example: ["mediatopic:20000139"] (international trade). Exchange SHOULD match the requested topic and its descendants.
news.date_published_afterstringOptionalISO 8601Only return content published on or after this datetime.
news.date_published_beforestringOptionalISO 8601Only return content published on or before this datetime.
news.languagestringOptionalBCP 47Filter by content language. Example: "en", "fr", "zh-Hans".
news.exclude_retractedbooleanOptionalNewsML-G2 stat:canceledIf true, exclude content with pub_status = "canceled". Default: true. Agents querying for retracted content for research purposes set this to false.
news.source_organizationstringOptionalSchema.org sourceOrganizationFilter by originating news organization name. Example: "Associated Press".

These fields describe news-specific properties of an offer. They help agents evaluate content relevance, freshness, editorial status, and licensing terms.

KeyTypeRequiredSource StandardDescription
news.article_typestringRecommendedSchema.org NewsArticle subtypesArticle type. Values: reportage, analysis, opinion, review, background, satirical, live_blog. Enables agents to distinguish factual reporting from opinion pieces.
news.media_topicstring[]RecommendedIPTC NewsCodes mediatopic:Subject classification QCodes from the IPTC Media Topics vocabulary. Example: ["mediatopic:20000139", "mediatopic:20000209"].
news.urgencyintegerOptionalIPTC NewsCodes urgency:Editorial urgency on the IPTC 1-9 scale. 1 = flash (highest priority), 5 = normal, 9 = lowest. Helps agents prioritize breaking news over features.
news.word_countintegerOptionalSchema.org wordCount / rNewsWord count of the article body. Agents use this for cost estimation and reading time.
news.sectionstringOptionalSchema.org articleSectionEditorial section. Examples: "Business", "Sports", "Technology".
news.languagestringRecommendedBCP 47Content language code. Example: "en", "de".
KeyTypeRequiredSource StandardDescription
news.pub_statusstringRecommendedNewsML-G2 pubStatusPublishing status of the content. Values from IPTC NewsCodes: usable (may be published), withheld (not for publication yet), canceled (killed, must never be published). See Content Lifecycle for state machine.
news.signalstringConditionalNewsML-G2 signalPresent when this offer represents a correction or update. Values: update (non-error changes), correction (factual error remedied), cwarn (content warning).
news.versionintegerOptionalNewsML-G2 @versionContent version number. Starts at 1, increments on each update or correction. The news.iptc_guid remains constant across versions.
news.date_publishedstringRecommendedSchema.org datePublishedISO 8601 datetime of first publication. Example: "2026-03-19T14:30:00Z".
news.date_modifiedstringConditionalSchema.org dateModifiedISO 8601 datetime of last modification. Present when content has been updated or corrected.
KeyTypeRequiredSource StandardDescription
news.source_organizationstringRecommendedSchema.org sourceOrganizationOriginating news organization. Example: "Reuters". For syndicated content, this is the original creator, not the re-publisher.
news.copyright_noticestringOptionalIPTC / Schema.org copyrightNoticeCopyright notice text. Example: "Copyright 2026 The Associated Press. All rights reserved."
news.tdm_reservationbooleanOptionalW3C TDMRepWhether text/data mining rights are reserved under EU DSM Directive Article 4. When true, the Offer’s AccessRestrictions define what mining is permitted. When absent, no TDM reservation is declared.

Attestation Claims (ResourceAttestation.claims)

Section titled “Attestation Claims (ResourceAttestation.claims)”

These claim names extend the core attestation vocabulary for news content. A provider or third-party verifier includes them in ResourceAttestation.claims.

Claim NameTypeSource StandardDescription
news.pub_statusstringNewsML-G2Publishing status at attestation time. Enables agents to trust the lifecycle state cryptographically.
news.versionintegerNewsML-G2Content version at attestation time. Agent can detect if content was updated between attestation and delivery.
news.date_publishedstringSchema.orgPublication date attested by verifier.
news.source_organizationstringSchema.orgAttested originating organization. Verifier confirms provenance.
news.correction_ofstringNewsML-G2URI of the resource this content corrects. Present only on correction attestations. Enables agents to trace the correction chain.

Example attestation:

{
"verifier": "doubleverify.com",
"kid": "dv-key-2026-03",
"attested_at": "2026-03-19T12:00:00Z",
"uri": "https://www.nytimes.com/2026/03/19/business/trade-deal.html",
"claims": {
"estimated_quantity": 2450,
"word_count": 1856,
"language": "en",
"content_hash": "sha256:a1b2c3d4e5f6...",
"news.pub_status": "usable",
"news.version": 2,
"news.date_published": "2026-03-19T08:15:00Z",
"news.source_organization": "The New York Times",
"news.correction_of": "https://www.nytimes.com/2026/03/18/business/trade-deal.html"
},
"signature": "base64-encoded-ed25519-signature"
}

News content introduces domain-specific dispute scenarios beyond the core DisputeReason enum.

KeyTypeRequiredSource StandardDescription
news.retracted_after_deliverybooleanConditionalNewsML-G2 stat:canceledSet to true when the agent discovers that the delivered content was retracted (killed) after the transaction. The agent transacted for usable content but the publisher subsequently set pub_status to canceled. This warrants a credit or redelivery of the correction.
news.correction_not_reflectedbooleanConditionalNewsML-G2 signalSet to true when the Offer indicated a specific news.version but the delivered content did not match that version. The agent expected a corrected version but received the original.
news.embargo_violatedbooleanConditionalNewsML-G2 embargoedSet to true when the Exchange delivered embargoed content before the embargo end time. The agent relied on the Exchange to enforce embargo dates.

Usage: These fields supplement, not replace, the core DisputeReason enum. The agent sets the core reason (e.g., DISPUTE_REASON_CONTENT_MISMATCH or DISPUTE_REASON_WRONG_CONTENT) and adds the news.* ext fields to provide domain-specific context for Tier 2 resolution.


Exchange News Capabilities (ExchangeManifest.ext)

Section titled “Exchange News Capabilities (ExchangeManifest.ext)”

Exchanges declaring ramp-news-v1 support SHOULD populate these fields to describe their news-specific capabilities.

KeyTypeRequiredSource StandardDescription
news.supported_article_typesstring[]OptionalSchema.orgArticle types available in the catalog. Example: ["reportage", "analysis", "opinion"]. Helps Brokers avoid querying an Exchange for article types it does not carry.
news.correction_propagationstringOptionalRAMP-NewsHow the Exchange handles corrections from publishers. Values: realtime (corrections reflected within minutes), batch (corrections reflected on next catalog refresh), none (Exchange does not track corrections).
news.podcast_supportbooleanOptionalRAMP-NewsWhether the Exchange catalogs podcast episodes. Brokers use this to route podcast queries efficiently.

News content follows a well-defined lifecycle governed by the news.pub_status and news.signal fields. This lifecycle originates from IPTC NewsML-G2 and is adopted industry-wide by wire services.

+-----------+
publish | | hold
+---------->| usable |--------+
| | | |
| +-----+-----+ v
| | +----------+
| | kill | withheld |
| | +-----+----+
| v |
| +-----------+ kill |
| | |<--------+
| | canceled |
| | (terminal)|
| +-----------+
|
[first version]

State definitions:

StateQCodeMeaningAgent Action
usablestat:usableContent may be used without restrictionNormal consumption
withheldstat:withheldContent must not be used until releasedDo not display or process; wait for release
canceledstat:canceledContent must never be used (terminal)Delete cached copies; do not display

When a publisher corrects an article:

  1. Publisher creates a new version (increments news.version)
  2. Publisher sets news.signal to "correction"
  3. The news.iptc_guid remains the same across all versions
  4. The news.date_modified is updated to the correction timestamp
  5. The news.pub_status remains "usable" (corrections do not retract)

What the Broker should do:

  • If a Broker has a cached offer for this resource, it should re-query to get the updated version
  • The Broker SHOULD prefer offers with higher news.version values
  • When news.signal is "correction", the Broker SHOULD log the correction event for the agent’s audit trail

When a publisher retracts content:

  1. Publisher sets news.pub_status to "canceled"
  2. This is a terminal state — the content cannot return to usable
  3. Exchange SHOULD remove the resource from active offers
  4. If a transaction has already occurred, the agent may file a dispute with news.retracted_after_delivery = true

What the agent should do:

  • Delete any cached copies of the content
  • Do not display the content to users
  • If the content was used in a generated response, flag the response as based on retracted source material

For podcast episodes, the following Offer.ext fields provide audio-specific metadata that agents need for content evaluation and delivery.

KeyTypeRequiredSource StandardDescription
news.podcast_show_titlestringRecommendedRSS / Apple PodcastsShow name. Example: "The Daily".
news.episode_numberintegerOptionalitunes:episodeEpisode number within the show or season.
news.season_numberintegerOptionalitunes:seasonSeason number.
news.duration_secondsnumberRecommendeditunes:durationEpisode duration in seconds. Used for cost estimation with PRICING_MODEL_PER_MINUTE.
news.episode_typestringOptionalitunes:episodeTypeEpisode classification. Values: full (standard episode), trailer (show preview), bonus (supplemental content).
news.transcript_urlstringOptionalPodcasting 2.0 podcast:transcriptURL to a transcript file.
news.transcript_typestringConditionalPodcasting 2.0 podcast:transcript@typeMIME type of the transcript. Values: text/plain, text/html, text/vtt, application/json (Podcasting 2.0 JSON format), application/x-subrip. Required when news.transcript_url is present.
news.has_daibooleanOptionalIAB DAIWhether dynamic ad insertion is active on this episode. When true, the audio content may differ between fetches (different ads stitched in). Affects content hashing — see Behavioral Conventions.
news.alternate_enclosuresobject[]OptionalPodcasting 2.0 podcast:alternateEnclosureAlternative media formats available. Each object: {"type": "audio/opus", "bitrate": 96000, "length": 48576000, "url": "https://..."}. Enables agents to select optimal format.

Podcast identity model: A podcast show is identified by news.podcast_guid (on ResourceIdentity.ext). An episode is identified by its canonical_url. The show-episode relationship is expressed by news.podcast_show_title and optionally news.episode_number / news.season_number.


This section defines how RAMP core protocol features interact with news content.

Content TypeMutabilityRationale
Published article (no corrections)STATICContent is stable after publication. Hash verification applies.
Article with correctionsDYNAMICContent changes when corrections are applied. Use Offer.data_as_of to indicate the snapshot time.
Breaking news / live blogDYNAMICContent is updated continuously during the event.
Podcast episode (no DAI)STATICAudio file is immutable once published.
Podcast episode (with DAI)DYNAMICDynamically inserted ads change the audio between fetches.
Live broadcast streamLIVEContent does not exist at offer time.

The Offer.data_as_of field carries particular importance for news:

  • For articles with corrections: data_as_of reflects when the latest correction was applied
  • For breaking news: data_as_of reflects the last update time
  • For podcast episodes: data_as_of is the publication date (or last DAI splice time for DAI-enabled episodes)
Content TypeTypical DeliveryNotes
News article (full text)DELIVERY_METHOD_INSTRUCTIONSSigned URL to publisher endpoint or CDN
News article (excerpt/summary)DELIVERY_METHOD_DIRECTExchange returns excerpt inline
Podcast episodeDELIVERY_METHOD_INSTRUCTIONSSigned URL to audio file on CDN
Live broadcastDELIVERY_METHOD_STREAMINGSigned URL to HLS/Icecast endpoint

News publishers have strong attribution requirements. The RAMP core Usage.attribution and AttributionDetail messages handle this:

  • AttributionDetail.displayed_url SHOULD be the article’s canonical_url
  • AttributionDetail.format SHOULD be CITATION_FORMAT_LINK (inline link to source) or CITATION_FORMAT_FOOTNOTE
  • AttributionDetail.visible_to_user MUST be true when the Offer’s AccessRestrictions require attribution

An Exchange returns an offer for a New York Times article. The article has been corrected once.

{
"offer_id": "offer-nyt-2026-0319-001",
"package": {
"id": "pkg-nyt-trade-deal",
"resource": {
"uri": "https://www.nytimes.com/2026/03/19/business/trade-deal.html",
"title": "U.S. and EU Reach Landmark Trade Agreement"
}
},
"pricing": {
"model": "PRICING_MODEL_PER_ARTICLE",
"rate": 0.15,
"currency": "USD",
"unit_cost": 0.000061,
"estimated_quantity": 2450,
"unit": "tokens"
},
"delivery_method": "DELIVERY_METHOD_INSTRUCTIONS",
"identity": {
"canonical_url": "https://www.nytimes.com/2026/03/19/business/trade-deal.html",
"iptc_guid": "urn:newsml:nytimes.com:20260319:trade-deal-2026",
"content_hash": "sha256:3a7f8c9d2e1b4f6a...",
"hash_method": "sha256",
"resource_mutability": "RESOURCE_MUTABILITY_DYNAMIC",
"ext": {
"news.iptc_guid": "urn:newsml:nytimes.com:20260319:trade-deal-2026"
}
},
"data_as_of": "2026-03-19T16:45:00Z",
"restrictions": {
"permitted_functions": ["FUNCTION_SEARCH", "FUNCTION_SUMMARIZATION"],
"prohibited_functions": ["FUNCTION_TRAINING"],
"max_display_words": 250
},
"attestations": [
{
"verifier": "nytimes.com",
"kid": "nyt-key-2026-q1",
"attested_at": "2026-03-19T16:50:00Z",
"uri": "https://www.nytimes.com/2026/03/19/business/trade-deal.html",
"claims": {
"estimated_quantity": 2450,
"word_count": 1856,
"language": "en",
"content_hash": "sha256:3a7f8c9d2e1b4f6a...",
"news.pub_status": "usable",
"news.version": 2,
"news.date_published": "2026-03-19T08:15:00Z",
"news.source_organization": "The New York Times"
},
"signature": "ZXhhbXBsZS1zaWduYXR1cmU..."
}
],
"ext": {
"news.article_type": "reportage",
"news.media_topic": ["mediatopic:20000139", "mediatopic:20000209"],
"news.urgency": 3,
"news.word_count": 1856,
"news.section": "Business",
"news.language": "en",
"news.pub_status": "usable",
"news.signal": "correction",
"news.version": 2,
"news.date_published": "2026-03-19T08:15:00Z",
"news.date_modified": "2026-03-19T16:45:00Z",
"news.source_organization": "The New York Times",
"news.copyright_notice": "Copyright 2026 The New York Times Company. All rights reserved.",
"news.tdm_reservation": true
},
"exchange_signature": "bWFya2V0cGxhY2Utc2lnbmF0dXJl...",
"signature_algorithm": "ed25519"
}

An Exchange returns an offer for an NPR podcast episode with transcript and multiple audio formats.

{
"offer_id": "offer-npr-upfirst-20260319",
"package": {
"id": "pkg-npr-upfirst-ep-1247",
"resource": {
"uri": "https://www.npr.org/podcasts/510318/up-first/episodes/2026-03-19",
"title": "Up First: March 19, 2026"
}
},
"pricing": {
"model": "PRICING_MODEL_PER_MINUTE",
"rate": 0.03,
"currency": "USD",
"unit_cost": 0.03,
"estimated_quantity": 12,
"unit": "minutes"
},
"delivery_method": "DELIVERY_METHOD_INSTRUCTIONS",
"identity": {
"canonical_url": "https://www.npr.org/podcasts/510318/up-first/episodes/2026-03-19",
"content_hash": "sha256:b4c5d6e7f8a9...",
"hash_method": "sha256",
"resource_mutability": "RESOURCE_MUTABILITY_STATIC",
"ext": {
"news.podcast_guid": "917393e3-1b1e-5cef-ace4-edaa54e1f810"
}
},
"restrictions": {
"permitted_functions": ["FUNCTION_SEARCH", "FUNCTION_SUMMARIZATION"],
"prohibited_functions": ["FUNCTION_TRAINING"]
},
"ext": {
"news.article_type": "reportage",
"news.language": "en",
"news.pub_status": "usable",
"news.date_published": "2026-03-19T06:00:00Z",
"news.source_organization": "NPR",
"news.podcast_show_title": "Up First",
"news.episode_number": 1247,
"news.duration_seconds": 720,
"news.episode_type": "full",
"news.transcript_url": "https://www.npr.org/transcripts/up-first-20260319.vtt",
"news.transcript_type": "text/vtt",
"news.has_dai": true,
"news.alternate_enclosures": [
{
"type": "audio/mpeg",
"bitrate": 128000,
"length": 11520000,
"url": "https://play.podtrac.com/npr-510318/edge1.pod.npr.org/anon.npr-mp3/npr/upfirst/2026/03/20260319_upfirst.mp3"
},
{
"type": "audio/opus",
"bitrate": 96000,
"length": 8640000,
"url": "https://play.podtrac.com/npr-510318/edge1.pod.npr.org/anon.npr-opus/npr/upfirst/2026/03/20260319_upfirst.opus"
}
]
},
"exchange_signature": "bnByLXBvZGNhc3Qtc2lnbmF0dXJl...",
"signature_algorithm": "ed25519"
}

An agent previously purchased version 1 of an article. The publisher issues a correction. The agent queries again and receives the corrected version.

Step 1: Original offer (version 1)

{
"offer_id": "offer-ap-20260318-001",
"identity": {
"iptc_guid": "urn:newsml:ap.org:20260318:election-results",
"resource_mutability": "RESOURCE_MUTABILITY_STATIC"
},
"ext": {
"news.pub_status": "usable",
"news.version": 1,
"news.date_published": "2026-03-18T22:00:00Z",
"news.source_organization": "Associated Press"
}
}

Step 2: Corrected offer (version 2)

{
"offer_id": "offer-ap-20260319-002",
"identity": {
"iptc_guid": "urn:newsml:ap.org:20260318:election-results",
"content_hash": "sha256:new-corrected-hash...",
"resource_mutability": "RESOURCE_MUTABILITY_DYNAMIC"
},
"data_as_of": "2026-03-19T10:30:00Z",
"attestations": [
{
"verifier": "ap.org",
"kid": "ap-key-2026",
"attested_at": "2026-03-19T10:35:00Z",
"uri": "https://apnews.com/article/election-results-2026",
"claims": {
"news.pub_status": "usable",
"news.version": 2,
"news.correction_of": "https://apnews.com/article/election-results-2026?v=1"
},
"signature": "Y29ycmVjdGlvbi1zaWduYXR1cmU..."
}
],
"ext": {
"news.pub_status": "usable",
"news.signal": "correction",
"news.version": 2,
"news.date_published": "2026-03-18T22:00:00Z",
"news.date_modified": "2026-03-19T10:30:00Z",
"news.source_organization": "Associated Press"
}
}

What the agent observes:

  • Same iptc_guid — this is the same story
  • news.version incremented from 1 to 2
  • news.signal is "correction" — a factual error was fixed
  • resource_mutability changed to DYNAMIC because the content was updated
  • Attestation includes news.correction_of pointing to the original

An agent queries an Exchange for multiple news articles in a single request.

{
"ver": "1.0",
"id": "query-batch-20260319-001",
"aisystem": {
"name": "research-assistant",
"aisysuse": {
"lid": "license-research-2026",
"uri": [
"https://www.nytimes.com/2026/03/19/business/trade-deal.html",
"https://www.reuters.com/business/trade-deal-details-2026-03-19",
"https://apnews.com/article/trade-deal-reaction-2026"
],
"fn": "FUNCTION_SUMMARIZATION"
}
},
"ext": {
"news.article_type": "reportage",
"news.exclude_retracted": true,
"news.language": "en"
}
}

The Exchange returns an OfferGroup per URI. The Broker can then:

  1. Match offers across Exchanges by news.iptc_guid (if the Reuters and AP stories syndicated through wire)
  2. Filter out any offers where news.pub_status is not "usable"
  3. Prefer offers with higher news.version (latest correction)
  4. Compare unit_cost across Exchanges for the same underlying story

An Exchange MUST implement:

  • news.pub_status on Offer.ext
  • news.date_published on Offer.ext
  • news.source_organization on Offer.ext
  • news.language on Offer.ext
Section titled “Level 2: Standard (Recommended for production)”

An Exchange SHOULD additionally implement:

  • All Identity Vocabulary fields (as applicable)
  • news.article_type, news.media_topic, news.version, news.signal, news.date_modified
  • Attestation claims: news.pub_status, news.version
  • Correction propagation (update offers when publishers issue corrections)

Level 3: Full (Wire services and podcast platforms)

Section titled “Level 3: Full (Wire services and podcast platforms)”

An Exchange MAY additionally implement:

  • All Query Vocabulary fields
  • All Podcast/Audio fields
  • All Dispute Extension fields
  • news.tdm_reservation, news.copyright_notice
  • Exchange Manifest news capability fields