Getting Started with FCC Ads
Flipkart Commerce Cloud’s Ad monetisation service (FCC AdMon Service) enables you to monetise your properties such as website, MSite, and Apps (Android and iOS) by selling ad spaces. Presently, the supported advertising content includes ‘Display ads’ on your properties (websites, mobile apps) across geographies and across publishers.
Who can integrate with Ad-Tech Services?
You’re a Flipkart Commerce Cloud Customer
You have subscription or trial access to FCC Ad Monetization product
You own one or more consumer properties – website, mobile app (Android/iOS), mSite
How can I integrate with FCC AdMon Service?
OpenRTB is the main integration process for working with the FCC AdMon Service.
Details required to be onboarded on FCC AdMon Service
Network Details
Each network, an aggregation of demand from advertisers and supply from publishers, has to be onboarded on the FCC AdMon Service. The details required for network onboarding have to be shared offline.
Inventory Details
The monetizable ad inventory available on the web/app has to be onboarded as supply constructs on the FCC AdMon Service. The ad inventory needs to be defined according to the guidelines here.
Creative format Specifications
Specifications for the creative formats that need to be supported and integrated into the FCC AdMon service have to be shared offline. These include:
Asset types (Landing Page, Image, Trackers etc.)
Image Dimensions (maximum height and width of the image)
Supported aspect ratio of the image
File type for the image (png/jpg etc)
Max file size for the image etc.
Advertiser Account Details
For an advertiser who wants to advertise on the Publisher, there will be an advertiser account, the details can be shared offline and account admin will onboard the account. The details required for the advertiser account onboarding can be found here.
Custom User Segments for Targeting
Custom user segments that will be used for targeting demand will be shared offline by the Publisher Network. These user segment files will contain the anonymised user ID which will be passed in the ad request for targeting the user.
Getting Started with OpenRTB
FCC Ad Monetisation service supports the integration specifications for OpenRTB 2.5. We have also provided example requests and responses to make it easier for you to understand the integration process.
Introduction to OpenRTB
OpenRTB project provides open industry standards for communication between buyers of advertising and sellers of publisher inventory. The overall goal of OpenRTB is and has been to create a lingua franca for communicating between buyers and sellers.
The following figure illustrates the OpenRTB interactions between an exchange and its bidders. Ad requests originate at publisher sites or applications. For each inbound ad request, bid requests are broadcast to bidders, responses are evaluated under prevailing auction rules, and a winner is selected. The winning bidder is notified of the auction win via a win notice. Ad markup can either be included in the bid prospectively or in response to the win notice.
A separate billing notice is also available to accommodate varying policies enacted by exchanges that are beyond the scope of the OpenRTB specification (e.g., billing on device delivery, viewability, etc.). The win notice informs the bidder’s pricing algorithms of a success, whereas the billing notice indicates that spend should actually be applied. A loss notification is also available to inform the bidder of the reason their bid did not win.
The URLs for win, billing, and loss notices and the ad markup itself can contain any of several standard macros that enable the exchange to communicate critical data to the bidder (e.g., clearing price).
For the purpose of integration with the FCC AdMon Service, only Bid Request and Bid Response are relevant.
Supported Ad Formats
FCC AdMon Service supports Native display ads format.
API Integration Guidelines
Introduction
The FCC AdMon Server to Server API spec allows publishers to integrate with FCC AdMon Service directly from their server. This document lays out the Ad request, response structures and the parameters included in each of them to enable publishers to integrate with FCC AdMon Service .
API Endpoint
Publishers can use the following endpoints to integrate with the FCC AdMon Service:
v1/dsp/getBids?client=publisherid
HEADER PARAM:
x-Auth-Token: Will be shared post contracts are finalised
Publisher ID will be shared after the network is onboarded
Request Method
Ad requests must be sent using the HTTPS Post method. All request parameters must be sent within a JSON object within the POST body.
Required HTTP Headers
Header Name | Description | Values |
Content-Type | The MIME type of the body of the request | application/json |
Request Object
The top-level ad request object contains the entire JSON payload with the request. The child objects and parameters under the Request object are described in the following table:
Object/Parameter | Type | Required / Optional | Description |
id | String | Required | Unique id of the bid request for each advertisement batch request from the external publisher. |
imp | Object Array | Required | Array of imp objects representing the supply metadata for each monetizable impression entity . At least one impression object is required. |
device | Object | Required | Device object containing the details of the user’s device to which the impression needs to be delivered. |
test | Integer | Required, | Toggle indicating billability of the bid. |
ext | Object | Optional | Placeholder for exchange-specific extensions to [Open RTB Specification ](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf)version 2.5. |
Imp Object
The imp object defines the type and number of ad impressions desired by the publisher. A single bid request can include multiple imp objects with unique ID values so the bids can reference them individually.
This is a mandatory object in the ad request and must contain the parameters described in the table below.
Attributes | Type | Required / Optional | Description |
id | String | Required | A unique identifier for this impression within the context of the bid request (typically, starts with 1 and increments). |
native | Object | Required | To denote that the impression is |
ext | object | Required | Extension to the impression object for sending supply metadata in context of the impression. |
Imp.native Object
This object denotes that the impression is offered as a native ad opportunity.
Attributes | Type | Requires / Optional | Description |
ver | String | Optional | Version of the Dynamic Native Ads API to which request complies; |
Imp.ext Object
This object denotes extension to the impression object for sending supply metadata in context of the impression.
Attributes | Type | Requires / Optional | Description |
slotId | String | Required | A unique identifier for the slot in the ad space within the context of the impression. |
Device Object
This object provides information pertaining to the device through which the user is interacting.
Attributes | Type | Required / Optional | Description |
ua | string | Recommended | User Agent of the device. This must be the original user agent without any modifications. |
dnt | integer | Required | Standard “Do Not Track” flag as set in the header by the |
lmt | integer | Mandatory with IDFA or GPID | Limit Ad Tracking setting of the device. The value should be: |
ip | string | Recommended | IP Address of the device in IPv4 format. Required if the ipv6 field is absent. |
os | string | Recommended | Name of the Operating System currently installed on the device. |
osv | string | Recommended | Version of the Operating System currently installed on the device. |
ifa | string | Conditionally mandatory | Identifiers for Advertisers on the iOS platform. Mandatory if the app object is present in the request. If app object is present but request does not contain ifa (for iOS only) the request will be invalidated. |
Ad Request Sample
Native Ads
{
“id”: “a7sIT125”,
“imp”: [
{
“id”: “OSGMz25”,
“native”: {
“ver”:”1.0″
},
“ext”: {
“slotid”: “DEFAULT_SLOT”
}
}
],
“app”: {
},
“device”: {
“dnt”: 0,
“lmt”: 0,
“ua”: “Dalvik/2.1.0 (Linux; U; Android 7.0; SM-J701F Build/NRD90M)”,
“ifa”: “kjsdnf”,
“os”: “Android”,
“osv”: “7.0”
},
“tmax”: 1000,
“test”: 0
}
Response Object
Top level ad response object contains JSON for payload with the response. A bid response may contain bids from one or more seats (entities representing the advertisers or brands). The bid response consists of a Bid Response id and a Seatbid object as mandatory attributes.
Attribute | Type | Required / Optional | Description |
id | string | Required | Id of the bid request to which this is a response. This is a reflection of the bid request ID for logging purposes. |
seatbid | Object array | Required | Array of seatbid objects with a minimum of one seatbid object. |
Seatbid (seatbid)
A bid response can contain multiple Seatbid objects, each on behalf of a different bidder seat and each containing one or more individual bids.
Attributes | Type | Required / Optional | Description |
bid | Object array | Required | Array of Bid objects each related to an impression. Multiple bids can relate to the same impression. |
Bid (bid )
A SeatBid object contains one or more Bid objects, each of which identified by an id, relates to a specific impression in the bid request via the impid attribute and constitutes an offer to buy that impression.
Attributes | Type | Required / Optional | Description |
id | String | Required | Bidder generated bid ID to assist with logging/tracking. |
impId | String | Required | ID of the Imp object in the related bid request. |
adm | String | Required | Ad markup containing the ad that will be rendered on the publisher property and meta information of the creative. |
bid.adm (Ad markup)
FCC AdMon Service passes the ad markup as part of the bid response. JSON is used to pass the ad markup. Following are the attributes that are passed as part of adm:
Attributes | Type | Description |
version | String | Version of the native template |
assets | Object Array | List of assets to be rendered by the client |
impUrls | String Array | List of impression URLs to be fired by the client. Details [here](#recording-events-on-the-ads). |
viewUrls | String Array | List of view URLs to be fired by the client. Details [here](#recording-events-on-the-ads) |
clickUrls | String Array | List of click URLs to be fired by the client. Details [here](#recording-events-on-the-ads) |
adm.assets Object
Attributes | Type | Description |
id | Integer | Unique Id of the asset |
img | Object | Image Object |
native | Object | Native Data |
assets.img Object
Attributes | Type | Description |
url | String | Image Url |
width | int | Height of the Image |
height | int | Width of the Image |
assets.native Object
Attributes | Type | Description |
value | String | Custom asset value |
type | String | Type of the custom asset |
Ad Response Sample
Native Ads
{
“id”: “a7sIT125”,
“seatbid”: [
{
“bid”: [
{
“id”: “AL2PPRCAAAAAGIAAB_1_DF456GF5GD”,
“impid”: “OSGMz25”,
“price”: 0.0,
“nurl”: “http://abc.com/bidWin?pl=sgZUyf1P5jiFimOVV0hqmcm0sljwUuJBPIRFpFyVIqShpstMGcpzV4LIEKOjY72bSQOTwRwZ0EbrZRJX73x7LVznhj0cknhVjvpwHDfXfoI1tNxgzpIau4b5xJfyqoCfcyQaKfCcLZ6koVEQLE2I3T7_0At4SQWiGybANN7e1L_X9lXc2D7s3MvYT9N85-hv&p=${AUCTION_PRICE}&cur=${AUCTION_CURRENCY}”,
“lurl”: “http://abc.com/bidLoss?pl=sgZUyf1P5jiFimOVV0hqmcm0sljwUuJBPIRFpFyVIqShpstMGcpzV4LIEKOjY72bSQOTwRwZ0EbrZRJX73x7LVznhj0cknhVjvpwHDfXfoI1tNxgzpIau4b5xJfyqoCfcyQaKfCcLZ6koVEQLE2I3T7_0At4SQWiGybANN7e1L_X9lXc2D7s3MvYT9N85-hv&p=${AUCTION_PRICE}&cur=${AUCTION_CURRENCY}&l=${AUCTION_LOSS}”,
“adm”: “{\”version\”:\”1.0\”,\”assets\”:[{\”id\”:-1156179165,\”img\”:{\”type\”:0,\”url\”:\”http://abc.com/flap-image/96d2660f51d748bf.jpg\”,\”width\”:640,\”height\”:1440},”native”:{“value”:”http://xyz.com”,”type”:”LP”}}}],\”impUrls\”:[\”http://abc.com/adImpression?pl=sgZUyf1P5jiFimOVV0hqmcm0sljwUuJBPIRFpFyVIqShpstMGcpzV4LIEKOjY72bSQOTwRwZ0EbrZRJX73x7LQQcvgV5TfCGeFgFSBdkLCMLTjiMQs3Lo4cVyS6vkrfGREzz3n6yrmAFwhbb68CQsnOsyYfdTe6WcjFJxqJUh08\”],\”viewUrls\”:[\”http://abc.com/adView?pl=sgZUyf1P5jiFimOVV0hqmcm0sljwUuJBPIRFpFyVIqShpstMGcpzV4LIEKOjY72bSQOTwRwZ0EbrZRJX73x7LQQcvgV5TfCGeFgFSBdkLCMLTjiMQs3Lo4cVyS6vkrfGREzz3n6yrmAFwhbb68CQsnOsyYfdTe6WcjFJxqJUh08&vst=[STARTTIME]&vet=[ENDTIME]\”],\”clickUrls\”:[\”http://abc.com/adClick?pl=sgZUyf1P5jiFimOVV0hqmcm0sljwUuJBPIRFpFyVIqShpstMGcpzV4LIEKOjY72bSQOTwRwZ0EbrZRJX73x7LQQcvgV5TfCGeFgFSBdkLCMLTjiMQs3Lo4cVyS6vkrfGREzz3n6yrmAFwhbb68CQsnOsyYfdTe6WcjFJxqJUh08&cet=[EVENTTIME]\”]}”,
“adomain”: [
“www.flipkart.com”
],
“cat”: [
“IAB19-2”
],
“exp”: 3600,
“ext”: {
“creative_duration”: 0,
“include_cta”: false
}
}
]
}
],
“bidid”: “AL2PPRCAAAAAGIAAB”,
“cur”: “INR”
}
Recording events on the Ads
The FCC AdMon service tracks the ad interaction events only when the trackers are fired. The events that are tracked are:
Impression: This event has to be fired when the ad is loaded on the client (app/site)
View: This event has to be fired when the ad is in the viewable port for the user. Viewability can be defined by the publisher. (Recommended: IAB guidelines – ad which appears at least 50% on screen for more than one second.)
Click: This event has to be fired when the user clicks on the advertisement.
To record impression/ view /click on the ad, follow these steps:
Get the list of URLs for that event for the ad from the ad markup.
For each tracker url, do the following:
Send a GET request to the urls, with an http client.
Retry up to 5 times if the url fails, with an exponential backoff defined by retryTime * Uniform[0, 1], and retryTime doubled for every failure with start retry time as 1 second.
The tracker events have to be fired in real time so that the budget and frequency capping systems can work.
Impression Tracker
This event is to be fired when the tenant ( website / Mobile App SDK receives the Ad Bid response). This event helps in calculating the efficiency of serving Ads.
Type: GET
Sample: https://host:port/adImpression?pl=encryptedPayload
Query Params | Description |
pl | This will contain the encrypted data generated while serving. |
View Tracker
This event is to be fired when the Ads become visible on the viewport of the user. This event helps in calculating the performance of serving Ads.
Type: GET
Sample: https://host:port/adView?pl=encryptedPayload&vst=[STARTTIME]&vet=[ENDTIME]
Query Params | Description |
pl | This will contain the encrypted data generated while serving. |
vst | This is the start time of the view event i.e the instance when the banner comes into the view port for the first time. |
vet | This is the end time of the view event i.e the instance when the banner comes out of the view port. |
Click Tracker
This event is to be fired when the Ads are clicked by the user. This event helps in calculating the performance of serving Ads.
Type: GET
Sample: https://host:port/adClick?pl=encryptedPayload&et=[EVENTTIME]
Query Params | Description |
pl | This will contain the encrypted data generated while serving. |
et | This is the event time i.e when the click event is triggered. |
Error Responses
Error Code | Description |
204 | Validation Errors If Any |
Appendix
Supply Definition Guidelines
Supply constructs and Hierarchy:
**Entity** | **Definition** |
Network | An aggregation of demand from advertisers and supply from publishers. |
Publisher Group | A group of publishers. |
Publisher | A website/app that provides monetisable ad inventory to the advertisers. |
Page | A publisher website/app consists of many web pages linked together. Each is referred to as a page. For example, Home Page, Product Page etc. |
Slot | Each page on a website can be divided into monetisable spaces where an ad can load. |
Creative Format | A unique collection of asset types that will be required to create an ad. For example, Banner ad (landing page, image), Rich Banner (landing page, image, Logo, CTA text) etc. |
Advertiser Account Onboarding
Details required for Onboarding an advertiser account:
Advertiser / Brand Account Name
Email Address
Company Phone Number
Company website URL
Communication address
Top-level domain
Billing Name
VAT Registration Number (or any other document equivalent for that country)
Billing Address
Service Tax Number equivalent for that country
Upload Documents (Agreement/Cancelled cheque etc – these will differ with each country)