Single Brand Banner 2 Widget

Tag Migration Notice: This widget uses the legacy bw-widget tag. For new implementations, please use <nw-blocks> tags instead. The bw-widget tag remains supported for backward compatibility.

Single Brand Banner 2

The SingleBrandBanner2 widget displays a full-width promotional banner featuring a single brand with logo, bonus text, a customizable background image, and a call-to-action button. Unlike its predecessor (singlebrandbanner), this widget supports two data sources:

  1. Brand source (via cloakedlink): fetches a specific brand directly
  2. Toplist source (via sellingpointtype + product): picks a brand from a toplist by position

Key Features

  • Dual Data Source: Brand-based or Toplist-based, determined automatically by cloakedlink presence
  • Dynamic Background Images: CMS-managed background assets per sport/category (football, tennis, etc.)
  • Device-Responsive Backgrounds: Separate mobile and desktop background images
  • Brand Position Selection: Pick any brand from a toplist by position index
  • Flexible CTA Styling: Customizable button colors with gradient support
  • Compliance Integration: Automatic disclaimer handling via compliance data
  • Tracking Support: Full tracking URL with referer and custom data
  • Responsive Layout: Full-width banner optimized for hero sections
  • Performance Optimized: Parallel KV lookups for sub-second rendering

Demo Examples

Full Parameters — Brand Source

Expand me...

{
  "brandId": "greatwin-casino",
  "isActive": true,
  "imgUrl": "/content/cms-images/40851a7c22de906342a1dc52d44bd9d69709310b-600x240.webp",
  "trackingLink": "greatwin-casino",
  "brandName": "Greatwin Casino",
  "bonus": "500 €",
  "bonusText": "Get €1577 First Deposit Star Platinum",
  "additionalBonusText": "+77 Free Spins Stone Ocean",
  "bonusExtra": "",
  "extraFreespins": 200,
  "alt": "Greatwin Casino",
  "ctaText": "Réclamez votre Bonus",
  "ctaColors": [
    "#05842A",
    "#05842A"
  ],
  "ctaHoverColors": [
    "#096725",
    "#096725"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "banner-hero",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/fb3f545116d1704a8358752506fce5f0b39369d9-1920x1080.webp",
  "fullwidth": "true",
  "channel": "pu",
  "country": "FR",
  "language": "fr",
  "referer": "review-page",
  "product": "CA",
  "sellingPointType": "general"
}

Full Parameters — Toplist Source

Expand me...

{
  "brandId": "ladbrokes-sport",
  "isActive": true,
  "imgUrl": "ladbrokes-sport.png",
  "trackingLink": "ladbrokes-sport",
  "brandName": "Ladbrokes Sport",
  "bonus": "-",
  "bonusExtra": "",
  "alt": "Ladbrokes Sport",
  "ctaText": "S'inscrire maintenant",
  "ctaColors": [
    "#CE7114",
    "#ECB22B"
  ],
  "ctaHoverColors": [
    "#C6740B",
    "#D47E1A"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "toplist-banner",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/fb3f545116d1704a8358752506fce5f0b39369d9-1920x1080.webp",
  "fullwidth": "true",
  "channel": "pu",
  "country": "FR",
  "language": "fr",
  "referer": "homepage",
  "product": "CA",
  "sellingPointType": "general"
}

Expand me...

{
  "brandId": "greatwin-casino",
  "isActive": true,
  "imgUrl": "/content/cms-images/40851a7c22de906342a1dc52d44bd9d69709310b-600x240.webp",
  "trackingLink": "greatwin-casino",
  "brandName": "Greatwin Casino",
  "bonus": "500 €",
  "bonusText": "Get €1577 First Deposit Star Platinum",
  "additionalBonusText": "+77 Free Spins Stone Ocean",
  "bonusExtra": "",
  "extraFreespins": 200,
  "alt": "Greatwin Casino",
  "ctaText": "S'inscrire",
  "ctaColors": [
    "#05842A",
    "#05842A"
  ],
  "ctaHoverColors": [
    "#096725",
    "#096725"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/fb3f545116d1704a8358752506fce5f0b39369d9-1920x1080.webp",
  "fullwidth": false,
  "channel": "se",
  "country": "FR",
  "language": "fr",
  "product": "CA",
  "sellingPointType": "general"
}

Brand Source — Tennis Background

Expand me...

{
  "brandId": "greatwin-casino",
  "isActive": true,
  "imgUrl": "/content/cms-images/40851a7c22de906342a1dc52d44bd9d69709310b-600x240.webp",
  "trackingLink": "greatwin-casino",
  "brandName": "Greatwin Casino",
  "bonus": "500 €",
  "bonusText": "Get €1577 First Deposit Star Platinum",
  "additionalBonusText": "+77 Free Spins Stone Ocean",
  "bonusExtra": "",
  "extraFreespins": 200,
  "alt": "Greatwin Casino",
  "ctaText": "Parier Maintenant",
  "ctaColors": [
    "#05842A",
    "#05842A"
  ],
  "ctaHoverColors": [
    "#096725",
    "#096725"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/c772fd72f9ecafdfbee6b4cd9bbc31014af74ed4-839x360.jpg",
  "fullwidth": false,
  "channel": "se",
  "country": "FR",
  "language": "fr",
  "product": "SB",
  "sellingPointType": "general"
}

Toplist Source — Brand at Position 2

Expand me...

{
  "brandId": "kto-sport",
  "isActive": true,
  "imgUrl": "/content/cms-images/8af1dc75f8b3a7ceb4e5cfeb234854174eb827c3-600x240.webp",
  "trackingLink": "kto-sport",
  "brandName": "KTO Sport",
  "bonus": "-",
  "bonusExtra": "",
  "alt": "KTO Sport",
  "ctaText": "S'inscrire",
  "ctaColors": [
    "#05842A",
    "#05842A"
  ],
  "ctaHoverColors": [
    "#096725",
    "#096725"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/fb3f545116d1704a8358752506fce5f0b39369d9-1920x1080.webp",
  "fullwidth": false,
  "channel": "se",
  "country": "FR",
  "language": "fr",
  "product": "CA",
  "sellingPointType": "general"
}

Toplist Source — Brand at Position 0 (First)

Expand me...

{
  "brandId": "BetClic",
  "isActive": true,
  "imgUrl": "/content/cms-images/add694fd837aedab0dd8e90530cc925839ca14d8-600x240.webp",
  "trackingLink": "betclic-sport",
  "brandName": "Betclic Sport",
  "bonus": "100 €",
  "bonusText": "200% up to 2000EUR",
  "additionalBonusText": "DevOp checks",
  "bonusExtra": "you gonna win",
  "extraFreespins": 34,
  "alt": "Betclic Sport",
  "ctaText": "S'inscrire",
  "ctaColors": [
    "#05842A",
    "#05842A"
  ],
  "ctaHoverColors": [
    "#096725",
    "#096725"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/c772fd72f9ecafdfbee6b4cd9bbc31014af74ed4-839x360.jpg",
  "fullwidth": false,
  "channel": "se",
  "country": "FR",
  "language": "fr",
  "product": "CA",
  "sellingPointType": "general"
}

Mobile Simulation (Tennis Background)

Note: To simulate mobile rendering, use browser DevTools (F12 → Toggle device toolbar) or a mobile User-Agent. The widget automatically selects the mobile background image based on the User-Agent header.

Expand me...

{
  "brandId": "greatwin-casino",
  "isActive": true,
  "imgUrl": "/content/cms-images/40851a7c22de906342a1dc52d44bd9d69709310b-600x240.webp",
  "trackingLink": "greatwin-casino",
  "brandName": "Greatwin Casino",
  "bonus": "500 €",
  "bonusText": "Get €1577 First Deposit Star Platinum",
  "additionalBonusText": "+77 Free Spins Stone Ocean",
  "bonusExtra": "",
  "extraFreespins": 200,
  "alt": "Greatwin Casino",
  "ctaText": "Parier",
  "ctaColors": [
    "#05842A",
    "#05842A"
  ],
  "ctaHoverColors": [
    "#096725",
    "#096725"
  ],
  "target": "_blank",
  "rel": "nofollow",
  "trackingTarget": "",
  "trackingData": "",
  "hideBonuses": false,
  "hideBonusRibbon": false,
  "hideBonusText": false,
  "minimumAge": "0",
  "backgroundImage": "/content/cms-images/c772fd72f9ecafdfbee6b4cd9bbc31014af74ed4-839x360.jpg",
  "fullwidth": "true",
  "channel": "se",
  "country": "FR",
  "language": "fr",
  "product": "SB",
  "sellingPointType": "general"
}


Data Source Logic

Condition Source GQL Query KV Query
cloakedlink is provided Brand brandVulcanQuery brandVulcanQuery
cloakedlink is empty/missing Toplist vulcanTopsQuery vulcanTopsQuery

Brand Source Flow

  1. Fetches brand data by cloakedlink
  2. Extracts bonuses, logo, compliance
  3. Resolves background image from CMS

Toplist Source Flow

  1. Fetches toplist by websiteId + sellingPointType
  2. Filters toplist by country/language/product
  3. Picks brand at brandposition index (0-based)
  4. Returns null if product is not defined (required for toplist source)

Attributes Reference

Attribute Type Required Default Description
id string Yes - Must be "singlebrandbanner2"
cloakedlink string No* "" Brand identifier. If set, uses Brand source
sellingpointtype string No* "general" Toplist selling point type (used when no cloakedlink)
product string Yes (toplist) "" Product code (CA/SB/BI/PO/LO/LI/FN/ES/CR/CF/ST)
backgroundimage string No "" Background image code (e.g., “football”, “tennis”)
brandposition number No 0 0-based index of brand to pick from toplist
fullwidth boolean No false Whether banner spans full width
language string No "en" Language code (ISO 639-1)
country string No "" Country code (ISO 3166-1)
ctatext string No - Override CTA button text (bypasses translation)
ctakey string No "cta-claim-bonus" Translation key for CTA button text
ctacolors string/JSON No ["#05842A", "#05842A"] CTA button gradient colors
ctahovercolors string/JSON No ["#096725", "#096725"] CTA button hover gradient colors
trackinglinktarget string No "" Tracking link target path segment
target string No "_blank" Link target attribute
rel string No "nofollow" Link relationship attribute
referer string No - Referrer identifier for attribution
channel string No - Channel identifier (e.g., “pu”)
anchorid string No "" HTML anchor ID for the widget

*Either cloakedlink OR sellingpointtype + product is required.


Background Images

Background images are managed in Sanity CMS under the key single-brand-banner2. Each asset has:

  • code: identifier used in the backgroundimage attribute (e.g., “football”, “tennis”)
  • desktopImage: image served on desktop devices
  • mobileImage: image served on mobile devices

Device Detection

The widget automatically detects the device type via the User-Agent header:

  • Mobile → serves mobileImage
  • Desktop/Tablet → serves desktopImage

Available Background Codes

Code Description
football Football/soccer themed background
tennis Tennis themed background

Additional codes can be added via Sanity CMS without code changes.


Response Structure

The scope returns a unified SingleBrandBanner2Result object regardless of the data source:

{
  brandId: string;          // Brand legacy ID or cloaked link
  isActive: boolean;        // Whether brand is active for user's country
  imgUrl: string;           // Brand logo image URL
  trackingLink: string;     // Brand cloaked link for tracking
  brandName: string;        // Brand display name
  bonus: string;            // Formatted bonus amount (e.g., "500 €")
  bonusText?: string;       // Primary bonus description text
  additionalBonusText?: string; // Secondary bonus text
  bonusExtra: string;       // Extra bonus message
  extraFreespins?: number;  // Free spins count
  alt: string;              // Image alt text
  ctaText?: string;         // Resolved CTA button text
  ctaColors?: string[];     // CTA gradient colors
  ctaHoverColors?: string[];// CTA hover gradient colors
  target: string;           // Link target (_blank, _self, etc.)
  rel: string;              // Link rel attribute
  trackingTarget: string;   // Tracking target segment
  trackingData: string;     // Additional tracking data
  hideBonuses: boolean;     // Compliance: hide all bonus info
  hideBonusRibbon: boolean; // Compliance: hide bonus ribbon
  hideBonusText: boolean;   // Compliance: hide bonus text
  minimumAge?: string;      // Minimum age requirement
  backgroundImage?: string; // Resolved background image URL
  fullwidth?: boolean;      // Full-width flag
  channel?: string;         // Channel identifier
  country: string;          // Resolved country code
  language?: string;        // Language code
  referer?: string;         // Referrer for attribution
  anchorid?: string;        // HTML anchor ID
  product?: string;         // Product code
  sellingPointType?: string;// Selling point type
}

All clickable elements use the following tracking URL:

/go/{trackingLink}/{trackingTarget}?wid=singlebrandbanner2&trackingData={trackingData}&referer={referer}&channel={channel}

Example:

/go/greatwin-casino/banner-hero?wid=singlebrandbanner2&trackingData=&referer=review-page&channel=pu