IRIS RSS Billboards Extension · v1.0

IRIS Billboards Feed Namespace

Namespace URI: https://rss.iris.a2d.tv/ns/billboards/1.0/

Overview

This namespace defines IRIS-specific elements that extend RSS 2.0 (alongside Media RSS) for publishing the billboards IRIS has received — short sponsor/promo spots ingested from commercial delivery — together with download URLs for their transcoded video files.

Every billboard IRIS holds appears in the feed, not only those that reached playout. Two different files may be offered per item and they are not interchangeable: a browsable MP4 mezzanine (iris:mediaUrl) and the broadcast XDCAMHD MXF (iris:playoutFileUrl). See The two file URLs below.

Feeds include atom:link pagination links (rel="self", rel="prev", rel="next") at the channel level, and order items by iris:createdAt descending.

The machine-readable schema for this namespace is published alongside this page at schema.xsd.

Feed Endpoint

A single endpoint serves this namespace. It returns Content-Type: application/rss+xml.

Endpoint Authentication Scope
https://api.iris.a2d.tv/rss/billboards Bearer token (Authorization: Bearer <api-key>) Every billboard IRIS has received, latest version of each only. The key for this feed is issued separately from the general distribution RSS key and is rotated independently.

Query parameters

An empty result for a spotId means no billboard is indexed under that code — not that IRIS never received it. Roughly a quarter of billboards carry no spot code at all and can only be found by walking the feed.

The two file URLs

An item may carry a mezzanine URL, a playout MXF URL, both, or neither. They are produced by different transcodes at different times and serve different purposes.

iris:mediaUrl (and media:content) iris:playoutFileUrl
File Archive mezzanine, MP4 (video/mp4) DEFAULT playout package, XDCAMHD MXF (application/mxf)
URL type Signed CloudFront URL Presigned S3 URL, served with a Content-Disposition filename of <spot code>.mxf, falling back to <external ID>.mxf when the billboard has no spot code
Validity Currently 7 days from the moment the feed was rendered. Read the actual value from iris:mediaUrlExpiresAt rather than assuming the interval Currently 7 days from the moment the feed was rendered. Read the actual value from iris:playoutFileExpiresAt rather than assuming the interval
Available when The mezzanine transcode has finished — normally within a minute of iris:createdAt, and immediately for a new version of existing material. A playout transcode has produced an MXF. Absence means none exists: either the billboard has not been dispatched to playout yet, or it never will be, as with digital-only billboards.

Both URLs are re-signed on every feed request, so the advertised expiry always sits a full TTL ahead of the response you are reading — currently 7 days, though that is deployment configuration rather than a contract. Do not persist either URL beyond its stated expiry — re-poll the feed to obtain a fresh one.

Either URL may be omitted for the whole feed if IRIS cannot sign it (a signing key missing or unusable). The feed degrades rather than failing, so treat both as best-effort on every poll.

Pagination & Updates

Pagination model

The feed is paginated at the channel level using atom:link elements:

A spotId filter is carried through into the pagination links.

.../rss/billboards?limit=50&offset=0    
.../rss/billboards?limit=50&offset=50   

Ordering

Items are ordered by iris:createdAt descending — when IRIS created the delivery request, newest first — with the delivery request's identifier as a tie-break. This is a creation timestamp and it never changes for a given version, so the ordering is stable.

Versions, GUIDs and deduplication

Element Reference

Channel

Element Description Type Card. Example
title Human-readable title for the feed. Billboards (Filtered) when a spotId filter is applied. xsd:string 1..1 Billboards
description Short description of the feed's content. Names the spot code when filtered. xsd:string 1..1 Billboards received by Iris
link Fixed placeholder. This feed does not emit its own URL here — use atom:link [rel="self"] instead. xsd:anyURI 1..1 https://example.com/
lastBuildDate iris:createdAt of the first item on this page, as an RFC-822/RFC-1123 date. Omitted when the page is empty. xsd:string (RFC-822 date) 0..1 Tue, 01 Sep 2026 09:12:33 GMT
atom:link [rel="self"] Canonical URL of this page of the feed. xsd:anyURI 1..1 https://api.iris.a2d.tv/rss/billboards?limit=50&offset=0
atom:link [rel="prev"] URL of the previous page (omitted when offset=0). xsd:anyURI 0..1 https://api.iris.a2d.tv/rss/billboards?limit=50&offset=0
atom:link [rel="next"] URL of the next page (omitted on last page). xsd:anyURI 0..1 https://api.iris.a2d.tv/rss/billboards?limit=50&offset=50

Item

Elements are listed in the order they appear in the feed. Treat every optional element as optional in practice — older items predate later additions and simply omit them.

Element Description Type Card. Example
guid [isPermaLink="false"] Stable identifier for this version of the billboard, in the form <delivery-request-id>:v<version>. It is not a resolvable URL, hence isPermaLink="false". See Versions, GUIDs and deduplication above. xsd:string 1..1 8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b:v1
title Human-readable title. Falls back to iris:spotID, then to iris:externalId, when no title was supplied. xsd:string 1..1 Ohy_J1_v2_(2026-09-01)_Veik2_Coca_Moi2_Lidl_Billys_Sievi_Kamux_53s
description Short description of the item, naming the spot code (or the external ID when there is none). xsd:string 1..1 Billboard SG447916
pubDate Creation time of the delivery request (RFC-822/RFC-1123). Same instant as iris:createdAt, in RSS date form. xsd:string (RFC-822 date) 1..1 Tue, 01 Sep 2026 09:12:33 GMT
media:content Media RSS content element pointing at the signed mezzanine URL — the same URL as iris:mediaUrl. The duration attribute is in seconds, rounded; note that this differs from iris:duration, which is normally a frame-accurate timecode. Emitted only when the mezzanine URL is available. fileSize and duration are each omitted when the mezzanine did not record that value. Element (attrs: url, type; optional fileSize, duration) 0..1 url="https://mezzanine.iris.a2d.tv/…" type="video/mp4" fileSize="24051233" duration="53"
iris:mediaUrl Mezzanine download URL. A signed CloudFront URL for the archive mezzanine MP4, wrapped in CDATA (the query string contains characters that would otherwise need escaping). Re-signed on every feed request; the expiry is in iris:mediaUrlExpiresAt. xsd:anyURI 0..1 https://mezzanine.iris.a2d.tv/…_1080p.mp4?Expires=…&Key-Pair-Id=…&Signature=…
iris:mediaUrlExpiresAt When iris:mediaUrl stops working, ISO-8601 UTC. Present exactly when iris:mediaUrl is. xsd:dateTime 0..1 2026-09-10T09:12:33.000Z
iris:externalId Identifier of the billboard in the upstream commercial-delivery system. xsd:string 1..1 355430
iris:version Version number of this billboard within IRIS, starting at 1. Only the highest version of a billboard appears in the feed. xsd:positiveInteger 1..1 1
iris:createdAt When IRIS created the delivery request for this billboard version, ISO-8601 UTC. This is the feed's ordering key. xsd:dateTime 1..1 2026-09-01T09:12:33.000Z
iris:firstCopiedToPlayoutAt When the billboard's first playout transfer completed, ISO-8601 UTC. Present only once a transfer has completed, and the only indication that a billboard reached playout. Absent for digital-only billboards and for anything not yet dispatched. xsd:dateTime 0..1 2026-09-02T13:50:18.859Z
iris:playoutFileUrl Playout MXF download URL. A presigned S3 URL for the DEFAULT playout package's XDCAMHD MXF, wrapped in CDATA. Served with a Content-Disposition filename of <spot code>.mxf — or <external ID>.mxf when there is no spot code — and a content type of application/mxf. Re-signed on every feed request; the expiry is in iris:playoutFileExpiresAt. xsd:anyURI 0..1 https://irisplayouttranscode-general-irisprod1-outbox.s3.eu-north-1.amazonaws.com/…_xdcamhd_50m.mxf?X-Amz-Expires=…&X-Amz-Signature=…
iris:playoutFileExpiresAt When iris:playoutFileUrl stops working, ISO-8601 UTC. Present exactly when iris:playoutFileUrl is. xsd:dateTime 0..1 2026-09-10T09:12:33.000Z
iris:playoutFileSize Size of the playout MXF in bytes. Omitted when the size is not recorded, even if iris:playoutFileUrl is present. xsd:nonNegativeInteger 0..1 412738560
iris:spotID Spot code (filmkod). Absent on billboards IRIS received without one — currently around a quarter of the feed — which can then only be found by walking the feed. This is the value the spotId query parameter matches. xsd:string 0..1 SG447916
iris:targetCompany Broadcaster the billboard was delivered for. Observed values: tv4, mtv. xsd:string 0..1 mtv
iris:duration Normally an HH:MM:SS:FF timecode — the last field is frames, not milliseconds or hundredths, so 00:00:53:00 is 53 seconds. Do not parse it as xsd:duration or as HH:MM:SS.mmm. It is an upstream tag that IRIS passes through without validating, so treat any other shape (a bare number of seconds, for instance) as possible and parse defensively. xsd:string 0..1 00:00:53:00
iris:channelGroup Channel group the billboard is intended for. Present on a minority of items; currently only TV4 is emitted. xsd:string 0..1 TV4

Full XML Example

A two-item response. The first item has both files; the second is digital-only and has no playout MXF and no spot code. Both items were signed by the same request, so they share an expiry instant regardless of when each billboard was created. Signature values are abbreviated here; live feeds carry them in full.

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
  xmlns:iris="https://rss.iris.a2d.tv/ns/billboards/1.0/"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Billboards</title>
    <description>Billboards received by Iris</description>
    <link>https://example.com/</link>
    <lastBuildDate>Tue, 01 Sep 2026 09:12:33 GMT</lastBuildDate>
    <atom:link rel="self" href="https://api.iris.a2d.tv/rss/billboards?limit=50&amp;offset=0"></atom:link>
    <atom:link rel="next" href="https://api.iris.a2d.tv/rss/billboards?limit=50&amp;offset=50"></atom:link>

    <item>
      <guid isPermaLink="false">8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b:v1</guid>
      <title>Ohy_J1_v2_(2026-09-01)_Veik2_Coca_Moi2_Lidl_Billys_Sievi_Kamux_53s</title>
      <description>Billboard SG447916</description>
      <pubDate>Tue, 01 Sep 2026 09:12:33 GMT</pubDate>
      <media:content url="https://mezzanine.iris.a2d.tv/8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b/1/8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b_1788270210604_15000_1080p.mp4?Expires=1789751553&amp;Key-Pair-Id=K2PK...PM8V&amp;Signature=ZBzQ...HA__" type="video/mp4" fileSize="24051233" duration="53"></media:content>
      <iris:mediaUrl>
        <![CDATA[https://mezzanine.iris.a2d.tv/8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b/1/8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b_1788270210604_15000_1080p.mp4?Expires=1789751553&Key-Pair-Id=K2PK...PM8V&Signature=ZBzQ...HA__]]>
      </iris:mediaUrl>
      <iris:mediaUrlExpiresAt>2026-09-10T09:12:33.000Z</iris:mediaUrlExpiresAt>
      <iris:externalId>355430</iris:externalId>
      <iris:version>1</iris:version>
      <iris:createdAt>2026-09-01T09:12:33.000Z</iris:createdAt>
      <iris:firstCopiedToPlayoutAt>2026-09-02T13:50:18.859Z</iris:firstCopiedToPlayoutAt>
      <iris:playoutFileUrl>
        <![CDATA[https://irisplayouttranscode-general-irisprod1-outbox.s3.eu-north-1.amazonaws.com/8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b/1/8b1f0c94-2d3e-4a77-9b10-5c6d7e8f9a0b_xdcamhd_50m.mxf?X-Amz-Expires=604800&response-content-disposition=attachment%3B%20filename%3D%22SG447916.mxf%22&X-Amz-Signature=6f21...9c4e]]>
      </iris:playoutFileUrl>
      <iris:playoutFileExpiresAt>2026-09-10T09:12:33.000Z</iris:playoutFileExpiresAt>
      <iris:playoutFileSize>412738560</iris:playoutFileSize>
      <iris:spotID>SG447916</iris:spotID>
      <iris:targetCompany>mtv</iris:targetCompany>
      <iris:duration>00:00:53:00</iris:duration>
    </item>

    <item>
      <guid isPermaLink="false">c40d5a71-88ef-4b02-a6d3-1e2f3a4b5c6d:v2</guid>
      <title>355118</title>
      <description>Billboard 355118</description>
      <pubDate>Mon, 31 Aug 2026 14:02:10 GMT</pubDate>
      <media:content url="https://mezzanine.iris.a2d.tv/c40d5a71-88ef-4b02-a6d3-1e2f3a4b5c6d/1/c40d5a71-88ef-4b02-a6d3-1e2f3a4b5c6d_1788183730000_15000_1080p.mp4?Expires=1789751553&amp;Key-Pair-Id=K2PK...PM8V&amp;Signature=Qm9v...Kg__" type="video/mp4" fileSize="9812004" duration="20"></media:content>
      <iris:mediaUrl>
        <![CDATA[https://mezzanine.iris.a2d.tv/c40d5a71-88ef-4b02-a6d3-1e2f3a4b5c6d/1/c40d5a71-88ef-4b02-a6d3-1e2f3a4b5c6d_1788183730000_15000_1080p.mp4?Expires=1789751553&Key-Pair-Id=K2PK...PM8V&Signature=Qm9v...Kg__]]>
      </iris:mediaUrl>
      <iris:mediaUrlExpiresAt>2026-09-10T09:12:33.000Z</iris:mediaUrlExpiresAt>
      <iris:externalId>355118</iris:externalId>
      <iris:version>2</iris:version>
      <iris:createdAt>2026-08-31T14:02:10.000Z</iris:createdAt>
      <iris:targetCompany>tv4</iris:targetCompany>
      <iris:duration>00:00:20:00</iris:duration>
      <iris:channelGroup>TV4</iris:channelGroup>
    </item>
  </channel>
</rss>

Schema

The authoritative schema is published at schema.xsd, alongside this page. It is reproduced below for convenience.

Show schema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="https://rss.iris.a2d.tv/ns/billboards/1.0/"
            xmlns="https://rss.iris.a2d.tv/ns/billboards/1.0/"
            elementFormDefault="qualified">

  <!-- iris:externalId -->
  <xsd:element name="externalId" type="xsd:string"/>

  <!-- iris:version -->
  <xsd:element name="version" type="xsd:positiveInteger"/>

  <!-- iris:createdAt (ISO-8601 UTC) -->
  <xsd:element name="createdAt" type="xsd:dateTime"/>

  <!-- iris:mediaUrl (signed CloudFront URL for the archive mezzanine) -->
  <xsd:element name="mediaUrl" type="xsd:anyURI"/>

  <!-- iris:mediaUrlExpiresAt (ISO-8601 UTC) -->
  <xsd:element name="mediaUrlExpiresAt" type="xsd:dateTime"/>

  <!-- iris:playoutFileUrl (presigned S3 URL for the XDCAMHD MXF) -->
  <xsd:element name="playoutFileUrl" type="xsd:anyURI"/>

  <!-- iris:playoutFileExpiresAt (ISO-8601 UTC) -->
  <xsd:element name="playoutFileExpiresAt" type="xsd:dateTime"/>

  <!-- iris:playoutFileSize (bytes) -->
  <xsd:element name="playoutFileSize" type="xsd:nonNegativeInteger"/>

  <!-- iris:firstCopiedToPlayoutAt (ISO-8601 UTC) -->
  <xsd:element name="firstCopiedToPlayoutAt" type="xsd:dateTime"/>

  <!-- iris:spotID (spot code / filmkod) -->
  <xsd:element name="spotID" type="xsd:string"/>

  <!-- iris:targetCompany -->
  <xsd:element name="targetCompany" type="xsd:string"/>

  <!-- iris:duration - normally an HH:MM:SS:FF timecode, but it is an upstream
       tag that IRIS passes through without validating, so it is typed loosely -->
  <xsd:element name="duration" type="xsd:string"/>

  <!-- iris:channelGroup -->
  <xsd:element name="channelGroup" type="xsd:string"/>

</xsd:schema>