Creative Specification

Creative types, supported formats, and rendering behavior for CloudX-rendered (server-to-server) demand

For server-to-server (SDK-less) demand, CloudX renders your creative in-app directly from the bid.adm markup — there is no network SDK involved. This page describes the creative types and formats CloudX accepts and the user-experience behavior it applies.

Bid response

Return the creative markup in the standard OpenRTB bid.adm field. Declare the creative type in bid.ext.crtype (html, mraid, or vast) whenever the request shape is ambiguous. In particular, a VAST response to a banner-shaped App Open or interstitial request must set crtype: "vast"; OpenRTB 2.6 responses should also set bid.mtype: 2.

{
  "id": "<id from the bid request>",
  "seatbid": [
    {
      "bid": [
        {
          "id": "1",
          "impid": "<imp id from the bid request>",
          "price": 2.50,
          "crid": "creative-123",
          "adomain": ["advertiser.example"],
          "adm": "<!doctype html> … (HTML/MRAID document, or VAST XML)",
          "ext": { "crtype": "html" }
        }
      ]
    }
  ]
}

The creative in adm must meet the requirements below. Do not send ext.cloudx.* fields other than ext.cloudx.render.auto_store and ext.cloudx.render.player_config.cards (Conversion surfaces); CloudX populates the rendering routing after the auction.

Creative types

  • HTML / MRAID 3.0 — Static and interactive HTML creatives. MRAID capabilities are platform-specific: Android does not support expand, resize, or playVideo; iOS supports playVideo and inline expand/resize, but not fullscreen expansion or resizing. Neither platform honors useCustomClose.
  • VAST video — VAST 2.0 through 4.3 are supported. VAST 5.x and unrecognized versions fail the render with an unsupported-version error. VPAID is not supported.

Supported formats

FormatHTML (MRAID 3.0)VAST video
Banner (320×50)✓—
MREC (300×250)✓—
Interstitial✓✓
Rewarded✓✓
Native——
App OpenEndpoint-dependentEndpoint-dependent

For eligible endpoint configurations, App Open uses the same fullscreen renderer as interstitials and accepts HTML/MRAID or VAST. CloudX confirms support during onboarding.

Native in the publisher-facing ad-format catalog is supplied through mobile SDK network adapters. Native is outside the public OpenRTB buyer endpoint contract described here; CloudX must confirm any separate Native endpoint integration.

User-experience behavior

CloudX keeps the visible fullscreen close control under SDK ownership. A creative can still call mraid.close() to dismiss an interstitial immediately, or a rewarded placement after reward eligibility. A VAST creative’s skipoffset can influence skip or watch-to-earn timing unless server configuration overrides it.

Close control

  • The close control is drawn and owned by the SDK, with a fixed top-trailing safe-area position and a minimum tap target of 50 dp on Android or 50 pt on iOS. Creatives cannot replace, hide, or relocate it.
  • mraid.useCustomClose() is accepted for compatibility but is an observe-only no-op — the SDK-owned close control remains authoritative.
  • SDK-managed timers and render state control when it appears. VAST has a stall escape hatch that reveals the close control. MRAID stuck-state watchdogs report telemetry only; they do not reveal the control or tear down the ad.

Interstitial

For HTML/MRAID, the CloudX close control normally appears after five seconds. VAST interstitial uses a skip countdown based on server configuration, the creative’s skipoffset, or the five-second default. Its close control appears primarily after playback or end-card handling, or as a late stall escape hatch.

Rewarded

  • Rewarded placements are non-skippable by default and expose no skip control; the user watches to completion.
  • If a watch-to-earn threshold applies, a close control (not a skip) appears once the threshold is crossed. A VAST skipoffset can define that threshold when the server does not override it. The reward is retained if the user then exits.
  • The reward is granted on completion, or on dismissal after eligibility is met. An escape-hatch exit during a stall does not grant a reward.
  • Watch-to-earn eligibility accrues from foreground time only; backgrounding the app does not advance the timer.

Conversion surfaces

On iOS, CloudX shortens the path from a VAST interstitial or rewarded ad to an install with three surfaces:

  • App Store sheet (AutoStore): the advertised app’s product page opens inside the app when the video ends, before the first end card. If the ad has no end card, it opens when the user closes the ad, and the ad closes after the sheet is dismissed. It is shown at most once per ad.
  • SKOverlay: Apple’s App Store banner. When the ad also uses AutoStore, the overlay appears after the sheet is dismissed and, by default, stays on screen for the rest of the ad. It is always removed when the ad closes.
  • End card sequence: the VAST companion, if any, followed by the cards you send in cards. Each card has its own install button and close control.

The sheet and the overlay carry the signed SKAdNetwork data from your bid, so installs they drive are eligible for StoreKit-rendered (fidelity: 1) attribution. See SKAdNetwork for the required fields. Conversion surfaces require CloudX iOS SDK 3.10 or later.

Defaults

CloudX adds AutoStore and the SKOverlay to a bid when all of the following hold:

  • the request comes from CloudX iOS SDK 3.10 or later;
  • the slot is interstitial or rewarded (App Open is excluded);
  • the creative is VAST;
  • the bid includes bid.ext.skadn.itunesitem.
FieldDefault added by CloudX
bid.ext.cloudx.render.auto_store{"enabled": true, "on_skip": true, "on_close": true}
bid.ext.skadn.skoverlay{"pos": 0, "dismissible": 0, "delay": 0, "endcarddelay": 0}

CloudX fills in only what your bid leaves out. A field you send is used as sent, including an opt-out.

Fields you can set

bid.ext.cloudx.render.auto_store

KeyTypeMeaning
enabledbooleanfalse turns AutoStore off for this bid.
on_skipbooleanOpen the sheet when the user skips the video.
on_closebooleanOpen the sheet before the first end card, or when the ad closes if there is no end card.

To opt out, send "auto_store": {"enabled": false}.

bid.ext.skadn.skoverlay (field names from the IAB SKAdNetwork extension)

KeyTypeMeaning
posinteger0 bottom, 1 bottom raised. Other values use bottom.
dismissibleinteger1 the user can swipe it away, 0 they cannot. If you send skoverlay without this key, the overlay is dismissible.
delaynumberSeconds after the video starts before the overlay shows. -1 or absent disables this phase.
endcarddelaynumberSeconds after the end cards begin before the overlay shows. -1 or absent disables this phase.
ext.sk_dismiss_delaynumberSeconds after it shows before the overlay is removed automatically. -1 or absent keeps it up.

When the bid also uses AutoStore, the overlay waits until the sheet has been dismissed. To opt out of the overlay, send "skoverlay": {"delay": -1, "endcarddelay": -1}.

bid.ext.cloudx.render.player_config.cards

An array of end cards, shown in order after the VAST companion. Each card:

KeyTypeMeaning
app_namestringApp name shown on the card.
app_icon_urlstringApp icon image URL.
cta_textstringInstall button label.
click_throughstringWhere the install button goes. An App Store link opens the in-app product page.
close.delay_secondsnumberSeconds before the card’s close control appears, capped at 5. The last card’s close control never appears sooner than 2 seconds.

A card with nothing renderable is skipped. The single-card player_config.dec object is still read when cards is absent.

All other ext.cloudx.* fields remain set by CloudX.

Example

{
  "id": "1",
  "impid": "<imp id from the bid request>",
  "price": 8.00,
  "adm": "<VAST version=\"4.2\"> … </VAST>",
  "ext": {
    "crtype": "vast",
    "skadn": {
      "version": "4.0",
      "network": "example.skadnetwork",
      "itunesitem": "1234567890",
      "sourceapp": "987654321",
      "campaign": "12",
      "fidelities": [
        { "fidelity": 1, "nonce": "…", "timestamp": "…", "signature": "…" }
      ],
      "skoverlay": { "pos": 0, "dismissible": 1, "endcarddelay": 0 }
    },
    "cloudx": {
      "render": {
        "auto_store": { "enabled": true, "on_skip": true, "on_close": false },
        "player_config": {
          "cards": [
            { "app_name": "Example Game", "app_icon_url": "https://cdn.example.com/icon.png", "cta_text": "Install", "click_through": "https://apps.apple.com/app/id1234567890" },
            { "app_name": "Example Game", "cta_text": "Play free", "click_through": "https://apps.apple.com/app/id1234567890" }
          ]
        }
      }
    }
  }
}

Resource limits

  • Fullscreen adm: 8 MiB
  • Each VAST XML document or wrapper response: 2 MiB
  • VAST media file: 50 MiB
  • Wrapper depth: five

Use video/mp4 for cross-platform compatibility; other advertised MIME types require endpoint and renderer confirmation.

Measurement

  • The SDK attempts Open Measurement (OMID) sessions for HTML and VAST creatives; setup is best-effort and certification parity depends on the shipped SDK version.
  • VAST 4.1 ViewableImpression and standard Impression events are tracked when the applicable path is available.
  • VAST 4.0+ AdVerifications resources are used to start vendor measurement when valid.

Fallback behavior

When a creative cannot be rendered — an unsupported VAST version, an unparseable payload, or a creative-type mismatch — CloudX fails the render. A bid with an unrecognized bid.ext.crtype can be skipped by the SDK before rendering, without an automatic error or loss notification to the buyer. CloudX does not guarantee another creative from the same auction.