Back to Bidders

Index Exchange (Prebid.js)

Features

Bidder Code ix Prebid.org Member yes
Media Types display, video, native GDPR TCF Support yes
User IDs identityLink, netId, fabrickId, zeotapIdPlus, uid2, unifiedId, id5Id, lotamePanoramaId, publinkId, hadronId, pubcid, imuid USP/CCPA Support yes
Supply Chain Support yes COPPA Support yes
Demand Chain Support no GPP Support yes
Supports Deals yes Prebid.js Adapter yes
IAB GVL ID 10 Prebid Server Adapter no
Floors Module Support yes First Party Data Support yes
Multi Format Support true ORTB Blocking Support check with bidder
Safeframes OK check with bidder

"Send All Bids" Ad Server Keys

These are the bidder-specific keys that would be targeted within GAM in a Send-All-Bids scenario. GAM truncates keys to 20 characters.
hb_pb_ix hb_bidder_ix hb_adid_ix
hb_size_ix hb_source_ix hb_format_ix
hb_cache_host_ix hb_cache_id_ix hb_uuid_ix
hb_cache_path_ix hb_deal_ix

Table of contents

Introduction

Publishers can use Prebid.js to call Index Exchange (Index) in any of the following ways:

Notes:

  • Send multiple ad slots in a single bid request: Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request.
  • How to view bid requests sent to Index:
    • In your browser, open a new tab.
    • Open the Developer tools.
    • In Developer tools, click the Network tab.
    • In the Network tab, search for requests sent to casalemedia.com/cygnus (from version 6.28.0 and earlier) or casalemedia.com/openrtb/pbjs (from version 6.29.0 and later). These are the bid requests sent to Index.
  • Recommended Global Bidder settings: For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s pbjs.bidderSettings documentation.
    Example:
    pbjs.bidderSettings = { 
      ix: { 
          storageAllowed: true 
      } 
    };
    

Supported media types

The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see How Index counts impressions in our Knowledge Base.

Type Prebid Server support
banner Supported
video Supported
native Supported

Set up Prebid.js to call Index directly from the browser (client-side adapter)

In this configuration Prebid.js calls Index directly from the browser using our client-side adapter. Follow the quick start instructions provided in Prebid’s Getting Started for Developers documentation. Complete the following steps to complete the Index-specific configuration:

  1. Build the binary in one of the following ways:
  2. Define the Index-specific parameters at the bidder level which include adding ix as the bidder and the siteId. For Index’s bidder-specific parameters, see the Bid request parameters section below.
    Example:
    {
         bidder: 'ix',
         params: {
             siteId: '123456'
         }
     }
    
  3. Define your ad units in the adUnit object. This includes the details about the ad slots such as the media types, ad size, and ad code. For more information about this object, see Prebid’s Ad Unit Reference documentation.
  4. Enable user syncing by adding the following code in the pbjs.setConfig() function. Index strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Index bid rate and bid price. Make sure to call pbjs.setConfig() only once. This configuration is optional in Prebid, but required by Index.
    Example:
     pbjs.setConfig({
         userSync: {
             iframeEnabled: true,
             filterSettings: {
                 iframe: {
                     bidders: ['ix'],
                     filter: 'include'
                 }
             }
         }
     });
    
  5. (Optional) Set up First Party Data (FPD) using the Index bidder-specific FPD (preferred method) setting or the Prebid FPD module. For more information, see the Set up First Party Data (FPD) section below.
  6. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the pbjs.setConfig() function as follows:
     pbjs.setConfig({
         cache: {
             url: 'https://prebid.adnxs.com/pbc/v1/cache'
         }
     });
    
  7. (Optional) If you want to monetize outstream video, you can choose among the following options. Outstream video is available from Prebid.js version 6.25 or higher.
  8. (Optional) Configure Prebid Native with Index. For more information, see the Prebid Native section below. Prebid Native is available from Prebid.js version 7.4.0 or higher.

Set up Prebid.js to call Index through Prebid Server (server-side adapter)

In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. Complete the following steps to configure Index as a demand source:

  1. If you are hosting your own Prebid Server instance, see Setup instructions to call Index through Prebid Server.
  2. In the [pbjs.setConfig()] function, within the s2sConfig property, add ix to the bidders attribute.
  3. Define the Index-specific parameters at the bidder level. For Index’s bidder-specific parameters, see the Bid request parameters section below.
  4. Define your ad units in the adUnit object. For more information about this object, see Prebid’s Ad Unit Reference documentation.
  5. Enable user syncing by adding the following code in the pbjs.setConfig() function. Index strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Index bid rate and bid price. Be sure to call pbjs.setConfig() only once. This configuration is optional in Prebid, but required by Index.
     pbjs.setConfig({
         userSync: {
              iframeEnabled: true,
              filterSettings: {
                  iframe: {
                  bidders: ['ix'],
                  filter: 'include'
                  }
              }
          }
      });
    
  6. (Optional) Set up First Party Data (FPD) using the Index bidder-specific FPD (preferred method) setting or the Prebid FPD module. For more information, see the Set up First Party Data (FPD) section below.
  7. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the [pbjs.setConfig()] function as follows:
     pbjs.setConfig({
         cache: {
                url: 'https://prebid.adnxs.com/pbc/v1/cache'
             }
     });
    
  8. (Optional) If you want to monetize outstream video, you can choose among the following options. Outstream video is available from Prebid.js version 6.25 or higher.
  9. (Optional) Configure Prebid Native with Index. For more information, see the Prebid Native section below. Prebid Native is available from Prebid.js version 7.4.0 or higher.

Modules to include in your build process

If you are building the JS binary on your own from source code, follow the instructions in Prebid.js project README. You will need to include the ixBidAdapter. If you want to show video ads with Google Ad Manager, also include the dfpAdServerVideo module. We highly recommend adding the gptPreAuction module as well, which improves a DSP’s ability to bid accurately on your supply. The following is an example build command that include these modules:
gulp build --modules=ixBidAdapter,dfpAdServerVideo,gptPreAuction,fooBidAdapter,bazBidAdapter

If you are using a JSON file to specify modules, add ixBidAdapter and dfpAdServerVideo to the modules array as follows:

[
    "ixBidAdapter",
    "dfpAdServerVideo",
    "gptPreAuction",
    "fooBidAdapter",
    "bazBidAdapter"
]

Set up First Party Data (FPD)

You can set up the Prebid.js FPD module using Global data, Index bidder-specific site data, or ad unit-specific data. Index supports deal targeting in all the three FPD types.

Global data

Use this data type to allow all bid adapters to have access to first party data that might be useful in ad targeting. This is available from Prebid.js version 4.30 and above.

To supply data that is accessible to all bidders, use the [pbjs.setConfig()] object as illustrated below. Use the [setBidderConfig()] function to supply bidder-specific data. For more information about the standard or more detailed examples, see Prebid’s First Party Data Feature documentation.

pbjs.setConfig({
    ortb2: {
        site: {
                    ...
               },
        user: {
                    ...
               }
            }
});

Index bidder-specific data

Use this data type to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for category = news. You can then create a deal in the Index UI and activate the deal only on pages that contain category = news as the key-value pair.

To include the FPD in a bid request, in the [pbjs.setConfig()] object at the ix bidder level, provide the key-values in the firstPartyData parameter. Make sure that you set it before the pbjs.requestBids configuration. If you want to change the values, you can update the pbjs.setConfig once again. The change will be reflected in all future bid requests.

 pbjs.setConfig({
    ix: {
        firstPartyData: {
            '<key name>': '<key value>',
            '<key name>': '<key value>',
            // ...
        }
    }
});

AdUnit-specific data

Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This will be available from Prebid.js version 7.46 and above. To include the adUnit-specific data in a bid request, see Prebid’s Supplying AdUnit-Specific Data documentation.

ortb2Imp: {
    ext: {
        data: {
                pbadslot: "homepage-top-rect",
                adUnitSpecificAttribute: "123"
               }
         }
           }

Index’s outstream video player

Publishers who are using Index as a bidding adapter in Prebid.js can show outstream video ads on their site using Index’s outstream video player. This allows a video ad to be placed anywhere on a publisher’s site, such as in-article, in-feed, and more. Outstream video is available from Prebid.js version 6.25 or higher.
Note: When you use the Index renderer for outstream video, all impressions are considered viewable, which is similar to how Google’s ActiveView counts impressions for outstream. This is because Index renders the outstream video as soon as it is in view and concurrently fires any impression pixels in the VAST.

To use Index’s outstream video player, in your Prebid.js configuration:

  1. Define a new video object in any of the following ways:
    • At the adUnit level: Define the size using video.playerSize.
    • At the bidder level: Define the size of the video player using the video.h and video.w parameters.
      Note: The bidder level video configurations override the adUnit level configurations. The playerConfig is only a bidder level configuration.
  2. Configure the player according to the options in the Bid request parameters section below.
    For more information on how to structure the video object, refer to the following code example:
var adUnits = [{
    code: 'div-gpt-ad-1571167646410-1',
    mediaTypes: {
        video: {
            playerSize: [640, 360],
            context: 'outstream',
            api: [2],
            protocols: [2, 3, 5, 6],
            minduration: 5,
            maxduration: 30,
            mimes: ['video/mp4', 'application/javascript'],
            placement: 5
        }
    },
    bids: [{
        bidder: 'ix',
        params: {
            siteId: '715964'
            video: {
                playerConfig: {
                    floatOnScroll: true,
                    floatSize: [300,250]
                }
            }
        }
    }]

Please note that your use of the outstream video player will be governed by and subject to the terms and conditions of i) any master services or license agreement entered into by you and Index Exchange; ii) the information provided on our knowledge base linked here and here, and iii) our Privacy Policy. Your use of Index’s outstream video player constitutes your acknowledgement and acceptance of the foregoing.

Prebid Native configuration

Prebid Native is available from Prebid.js version 7.4.0 or higher. We support the three native template rendering options that are provided in Setting up Prebid Native in Google Ad Manager. The following code is an example of a Prebid native setup using Google Ad Manager, but the concept and implementation should be similar for other ad servers.

pbjs.addAdUnits({
    code: slot.code,
    mediaTypes: {
        native: {
            image: {
                required: true,
                sizes: [150, 50]
            },
            title: {
                required: true,
                len: 80
            },
            sponsoredBy: {
                required: true
            },
            clickUrl: {
                required: true
            },
            privacyLink: {
                required: false
            },
            body: {
                required: true
                len: 90
            },
            icon: {
                required: true,
                sizes: [50, 50]
            }
        }
    },
    bids: [{
        bidder: 'ix',
        params: {
            siteId: '715966'
        }
    }]
});

Bid request parameters

For a list of the OpenRTB fields that Index supports in bid requests, see List of supported OpenRTB bid request fields for sellers. The following are the required fields for the various supported media types.

You must include these parameters at the bidder level.

Name Scope Type Description
siteId Required String An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, '3723', '6482', '3639'

Video

You must include these parameters at the bidder level.

Name Scope Type Description
siteId Required String An Index-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, '3723', '6482', '3639'
Note: You can re-use the existing siteId within the same flex position or video size, if the video adapts to the containing <div> element.

If you are using Index’s outstream player and have placed the video object at the bidder level, you must include the Index required parameters at the bidder level. You can include the optional parameters to specify the outstream player configurations.

Name Scope Type Description
video.w Required Integer The width of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the video.w and video.h parameters, with a minimum video player size of 300 x 250.
video.h Required Integer The height of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the video.w and video.h parameters, with a minimum video player size of 300 x 250.
video.playerSize Required Integer[] The video player size that will be passed to demand partners.
video.playerConfig Optional Hash The Index-specific outstream player configurations.
video.playerConfig.floatOnScroll Optional Boolean A boolean specifying whether you want to use the player’s floating capabilities, where:
- true: Use the Index player’s float capabilities.
Note: If you set floatOnScroll to true, Index updates the placement value to 5.
Note: We do not recommend using the player’s default float capabilities if you have more than one outstream ad unit per page.
-false: Do not use the Index player’s float capabilities (default).
video.playerConfig.floatSize Optional Integer[] The height and width of the floating player in pixels. If you do not specify a float size, the player adjusts to the aspect ratio of the player size that is defined when it is not floating. Index recommends that you review and test the float size to your user experience preference.

Native

Index supports the same set of native assets that Prebid.js recognizes. For the list of native assets, see Prebid.js Native Implementation Guide on the Prebid site.

Multi-format ad units

Index supports multi-format ad units, see Show Multi-Format Ads with Prebid.js. For multi-format ad units, you can optionally specify a different siteId for each multi-format type at the bidder level. This is useful if you have deals set up with Index at the siteId level. See multi-format examples here.

The following are the parameters that you can specify for each multi-format type at the bidder level.

Name Scope Type Description
siteId Required String An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, '3723', '6482', '3639'.

Note: This will also act as the default siteID for multi-format adunits if a format specific siteId is not provided.
banner.siteId Optional String An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for banner format in the multi-format ad unit.
video.siteId Optional String An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for video format in the multi-format ad unit.
native.siteId Optional String An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for native format in the multi-format ad unit.

Examples

Banner

var adUnits = [{
    code: 'banner-div-a',
    mediaTypes: {
        banner: {
            sizes: [
                [300, 250],
                [300, 600]
            ]
        }
    },
    bids: [{
        bidder: 'ix',
        params: {
            siteId: '123456'
        }
    } 
    }]
}];

Video (instream):
Note: context can either be 'instream' or 'outstream'.

var adUnits = [{
    code: 'video-div-a',
    mediaTypes: {
        video: {
            // Preferred location as of version 4.43
 video obj
            context: 'instream',
            playerSize: [300, 250],
            api: [2],
            protocols: [2, 3, 5, 6],
            minduration: 5,
            maxduration: 30,
            mimes: ['video/mp4', 'application/javascript'],
            placement: 3
        }
    },
    bids: [{
        bidder: 'ix',
        params: {
            siteId: '12345',
            video: {
                // openrtb v2.5 compatible video obj
                // If required, use this to override mediaTypes.video.XX properties
            }
        }
    }]
}];

Video (outstream)

var adUnits = [{
    code: 'div-gpt-ad-1571167646410-1',
    mediaTypes: {
        video: {
            playerSize: [640, 360],
            context: 'outstream',
            api: [2],
            protocols: [2, 3, 5, 6],
            minduration: 5,
            maxduration: 30,
            mimes: ['video/mp4', 'application/javascript'],
            placement: 5
        }
    },
    bids: [{
        bidder: 'ix',
        params: {
            siteId: '715964'
            video: {
                playerConfig: {
                    floatOnScroll: true,
                    floatSize: [300,250]
                }
            }
        }
    }]
}];

Prebid Native

pbjs.addAdUnits({
    code: slot.code,
    mediaTypes: {
        native: {
            image: {
                required: true,
                sizes: [150, 50]
            },
            title: {
                required: true,
                len: 80
            },
            sponsoredBy: {
                required: true
            },
            clickUrl: {
                required: true
            },
            privacyLink: {
                required: false
            },
            body: {
                required: true
                len: 90
            },
            icon: {
                required: true,
                sizes: [50, 50]
            }
        }
    },
    bids: [{
        bidder: 'ix',
        params: {
            siteId: '715966'
        }
    }]
});

Multi-format SiteId Overrides

var adUnits = [{
   code: slot.code,
   mediaTypes: {
      
       banner: {
           sizes: [300,250]
       },
       native: {
           title: {
               required: false
           },
           image: {
               required: true
           },
           sponsoredBy: {
               required: false
           },
           body: {
               required: false
           }
       },
      
       video: {
           playerSize: sizes,
           context: 'outstream',
           api:[2],
           protocols: [2, 3, 5, 6],
           minduration: 5,
           maxduration: 30,
           mimes: ['video/mp4','application/javascript']
       }
   },
   bids: [
   {
       bidder: 'ix',
       params: {
           siteId: '1111',
           video: {
               siteId: '2222'
           },
           native: {
               siteId: '3333'
           },
           banner: {
               siteId: '4444'
           }
       }
   },
]
}];

Back to Bidders