Custom Extensions for Creative Optimization


This feature is currently paused while Fyber builds support for iOS 14. We will reactivate this feature as soon as it has been adapted to fulfill the new StoreKit requirements introduced in iOS 14

Benefit to DSP

Experimentation is critical to all creative testing and optimization. Fyber understands the value our DSPs place on testing their own creatives, which is why we have introduced new creative customizations. This offers our partners more control over how their ads render on our SDK.

Since users are responsive to different triggers, this feature allows our partners to customize and build personalized experiences that drive the best results for them.

Fyber has a series of OpenRTB custom extensions that allow our DSP partners to customize specific creative components that are controlled by Fyber’s SDK.

  • Customize the text on the Call-to-Action button
  • Change the look and feel of the Call-to-Action button
  • Adjust how users engage with the Call-to-Action, click or swipe
  • Use the iOS StoreKit as your end card to bring the user one step closer to conversion 


Demand partners must have an OpenRTB integration with Fyber.

Server-to-server and programmatic mediation integrations are unable to use this feature.

Object: BidRequest

Set out below are the attributes for the Object: BidRequest.

Attribute Type Value Notes
imp.ext.ctatext Integer 1 Used by Fyber to tell the DSP that the ‘call to action’ text is customizable
imp.ext.ctamethod Integeter, Array 1,2 Used by Fyber to tell the DSP which CTA methods are available.

These CTA methods are currently only supported on iOS
The DSP must pass bid.ext.appstoreurl or bid.bundle to enable this feature
1. Manual - Makes the call to action button swipeable and applies the same CTA button to the video end card. A user's swipe or click on the CTA button opens the iOS StoreKit.
2. Automatic - the StoreKit is opened automatically after video skip or completion. No end card is shown. A click is fired upon video skip or completion based on user behavior.
      Fallback behavior: If the ctamethod is omitted, we fallback to our default call to action button.
Refer to the diagram for examples.



Object: BidResponse

Set out below are the attributes for the Object: BidResponse.

Attribute Type Value Notes
bid.ext.appstoreurl Non-encoded string Used by the DSP to pass Fyber the app store URL, so Fyber can pre-load the app store and provide the fastest possible app store open time for the user upon click.
Note: Fyber sends all the components of the click tracker, including redirects and pings to your MMP, as usual.

An app store URL with no app name is also an accepted value. For example,
bid.bundle String 1196764367 or com.zynga.words3 An alternative to using bid.ext.appstoreurl. See above.
bid.ext.ctatext String
with 15 character limit
Spin Now Allows DSP to provide Fyber with custom text to show on the call to action button on Fyber’s video player
bid.ext.ctamethod Integer 1 or 2 Used by the DSP to inform Fyber which CTA method to use in this session. If this parameter is omitted, Fyber uses our default CTA button and method.

- These CTA methods are currently only supported on iOS
- The DSP must pass bid.ext.appstoreurl or bid.bundle to enable this feature

Sample Bid Request

Set out below is a sample bid request with all the ad format bid request options.

 "id": "780000xxxxxx9202912",
   "imp": [{
         "id": "1",
         "secure": 0,
         "tagid": "67xxx1",
         "banner": {
                "id": "1",
                "w": 320,
                "h": 50,
                "wmin": 300,
                "hmin": 50,
                "pos": 4,
                "battr": [3, 6, 7, 9, 10, 14, 17],
                "topframe": 1,
                "btype": [4],
                "api": [5],
                "ext": {}
 "displaymanager": "Fyber",
 "displaymanagerver": "7.4.1",
 "clickbrowser": 0,
 "instl": 0,
 "bidfloor": 5.00,
 "bidfloorcur": "USD",
 "ext": {
        "brsrclk": 1,
        "ctamethod": [1, 2],
        "ctatext": 1,
        "abgroup": "CTAMethod,A;VideoPlayer,B"
"app": {
       "id": "679721",
       "name": "App_Name",
       "cat": ["IAB9-30"],
       "ver": "1.6.2",
       "bundle": "com.bundle",
       "privacypolicy": 1,
       "paid": 0,
       "publisher": {
             "id": "555555"
             "name": "Pub_Name",
             "ext": {}
       "storeurl": "\/\/\/store\/apps\/details?id=com.bundle",
       "ext": {}
 "device": {
        "dnt": 0,
        "ua": "Mozilla\/5.0 (Linux; Android 9; SM-A205U1 Build\/PPR1.180610.011; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/80.0.3987.149 Mobile Safari\/537.36",
        "ip": "",
        "lmt": 0,
        "geo": {
             "lat": 29.772,
             "lon": -95.3644,
             "country": "USA",
             "ipservice": 3,
             "region": "TX",
             "metro": "618",
             "city": "Houston",
             "zip": "77002",
             "type": 2,
             "ext": {}
        "carrier": "120",
        "language": "en",
        "make": "Samsung",
        "model": "SM-A205U1",
        "os": "Android",
        "osv": "9.0",
        "hwv": "Galaxy A20",
        "w": 411,
        "h": 813,
        "js": 1,
        "connectiontype": 6,
        "devicetype": 4,
        "ifa": "9999999999999999",
        "ext": {
               "inputLanguage": ["en"]
 "user": {
        "gender": "",
        "ext": {
               "consent": ""
 "source": {
        "fd": 0,
        "tid": "780000xxxxx89202912",
        "ext": {
               "schain": {
                      "ver": "1.0",
                      "complete": 1,
                      "nodes": [{
                             "asi": "",
                             "sid": "555555",
                             "hp": 1,
                             "rid": "780000xxxxxx202912"
  "regs": {
        "coppa": 0,
        "ext": {
               "gdpr": 0,
               "us_privacy": ""
  "at": 2,
  "cur": ["USD"],
  "tmax": 350,
  "bcat": ["IAB7-39", "IAB14-1", "IAB14-3", "IAB25-1", "IAB25-6", "IAB8-5", "IAB8-18", "IAB12-2", "IAB12-3", "IAB11-4", "IAB12-1", "IAB7-28", "IAB7-42", "IAB17-18", "IAB25-1", "IAB25-2", "IAB25-3", "IAB25-4", "IAB25-5", "IAB26", "IAB26-1", "IAB26-2", "IAB26-3", "IAB26-4", "IAB9-9"],
  "badv": [""],
  "ext": {}