Skip to main content
For server-to-server (SDK-less) demand, the CloudX SDK renders your creative in-app directly from the bid.adm markup — there is no network SDK involved. This page is the rendering contract: which creative types and formats are accepted, the per-bid configuration you can send, and the user-experience behavior the renderer enforces. This specification applies only to bids that CloudX renders. See the Demand Partner Overview for how rendering is routed.

Routing

A bid is rendered by CloudX when the bid response carries ext.cloudx.render.provider = "cloudx". The renderer then selects a creative engine from ext.crtype:
ext.crtypeRendered as
html (or absent)HTML / MRAID 3.0
vast or videoVAST video
The creative markup itself is read from bid.adm (HTML document or VAST XML).

Creative types

  • HTML / MRAID 3.0 — Static and interactive HTML creatives. MRAID 3.0 host APIs are exposed to the creative. mraid.useCustomClose() is accepted but has no effect (see Close control); on fullscreen placements expand() and resize() are rejected.
  • VAST video — VAST 2.0 through 4.3 are supported. VAST 5.x and unrecognized versions fail closed with an unsupported-version error, allowing the exchange to deliver a fallback creative. VPAID is not supported.

Supported formats

FormatHTML (MRAID 3.0)VAST video
Banner (320×50)Supported
MREC (300×250)Supported
InterstitialSupportedSupported
RewardedSupportedSupported
Native and App Open are not served by the CloudX renderer.

Per-bid configuration

Optional per-creative behavior is carried in ext.cloudx.render.player_config. Every field is optional; omit the block to accept SDK defaults.
{
  "ext": {
    "cloudx": {
      "render": {
        "provider": "cloudx",
        "player_config": {
          "close":  { "delay_seconds": 5 },
          "skip":   { "delay_seconds": 5 },
          "audio":  { "muted_by_default": false },
          "cta":    { "text": "Learn More" },
          "orientation": "auto"
        }
      }
    }
  }
}
FieldTypeApplies toMeaning
close.delay_secondsnumberInterstitial, RewardedDelay before the close control becomes visible. 0 = visible immediately.
skip.delay_secondsnumberInterstitial (VAST)Playback time before the skip control appears. Overrides the VAST skipoffset.
audio.muted_by_defaultbooleanVASTWhether video playback starts muted. Defaults to unmuted.
cta.textstringInterstitial, RewardedCall-to-action button copy. Falls back to the renderer default.
orientationstringFullscreenportrait, landscape, or auto. Unrecognized values fall back to auto.
decobjectFullscreenDouble-end-card configuration, passed through to the end-card renderer.
Value handling
  • A negative number is ignored and treated as absent (SDK default applies).
  • 0 or an absent field means “use the SDK default,” never “instant.” For example, an absent close.delay_seconds applies the default close delay rather than showing an instant close.
  • Unknown keys are tolerated and ignored, so new server-side knobs are forward-compatible.

User-experience behavior

The renderer applies a conservative, non-aggressive default experience, and enforces the close contract regardless of creative content.

Close control

  • The close control is drawn and owned by the SDK, with a fixed top-trailing safe-area position and a tap target of at least 50 pt. Creatives cannot replace, hide, or relocate it.
  • mraid.useCustomClose() is accepted for compatibility but is an observe-only no-op — the SDK close control always remains.
  • On a stall, a watchdog force-reveals the close control so the user is never trapped.

Interstitial

The close control appears after close.delay_seconds (default 5 seconds). For VAST, a countdown precedes skip availability per skip.delay_seconds; the SDK close control remains available as a fail-safe.

Rewarded

  • Rewarded placements are non-skippable by default and expose no skip control; the user watches to completion.
  • If a watch-to-earn threshold is configured, a close control (not a skip) appears once the threshold is crossed. 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.
close.delay_seconds defaults to 5 seconds but is not an enforced minimum. A positive value below 5 seconds is honored as sent. There is no placement-level floor or filter on per-bid timing today.

Measurement

  • Open Measurement (OMID) viewability is supported for both HTML and VAST creatives.
  • VAST 4.1 ViewableImpression and standard Impression events are tracked.
  • VAST 4.0+ AdVerifications (OMID verification resources) are honored.

Fallback behavior

When a creative cannot be rendered — an unsupported VAST version, an unparseable payload, or a creative-type mismatch — the renderer fails closed and reports the error, allowing the exchange to serve a fallback creative rather than showing a broken ad.