Supply Tag API
Creating a Supply Tag
SDK
Use tab completion with SDK to auto-complete function names or show field options!
tag = springserve.supply_tags.new({'name': 'TEST API DOCS', 'rate': 0.02, 'js_vpaid_enabled': false)
print tag.ok, tag.id
True, 28852
REST API
Method: POST
Endpoint URL: /api/v0/supply_tags
Notes: Note that for flat waterfalls, the tier parameter defaults to 1. Same goes for any demand tag included in demand_tag_priorities that does not specify the tier parameter.
name - (required, type: string) Name of the new supply tag.rate- (required, type: float) CPM rate of the new supply tag.supply_partner_id - (required, type: int) ID of supply partner to be associated with.js_vpaid_enabled - (required, type: boolean) Response type, JS VPAID or VAST Only
Request:
POST /api/v0/supply_tags
Content-Type: application/json
Authorization: "yourAuthToken"
{
"name": "MS TEST API DOCS",
"rate": 0.02,
"js_vpaid_enabled": false
}
Response:
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 730124,
"account_id": 391,
"name": "TEST API DOCS",
"active": true,
"rate": "0.02",
"js_vpaid_enabled": false,
.......
}
Examples
Python Example
import requests
import json
url = "https://console.springserve.com/api/v0/supply_tags/"
payload = json.dumps({
"name": "TEST API DOCS",
"rate": 10.25,
"js_vpaid_enabled": False
})
headers = {
'Authorization': 'yourAuthToken',
'Content-Type': 'application/json',
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
NodeJS Example
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://console.springserve.com/api/v0/supply_tags/',
'headers': {
'Authorization': 'yourAuthToken',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"name": "TEST API DOCS",
"rate": 10.25,
"js_vpaid_enabled": false
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
Get a Supply Tag
SDK
Use tab completion with SDK to auto-complete function names or show field options!
tag = springserve.supply_tags.get(730124) print tag.id, tag.name 730124, "TEST API DOCS"
REST API
Method: GET
Endpoint URL: /api/v0/supply_tags/<id>
- id - (required, type: integer) ID of the supply tag.
Request:
GET /api/v0/supply_tags/730124 Content-Type: application/json Authorization: "yourAuthToken"
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 730124,
"account_id": 391,
"name": "TEST API DOCS",
"active": true,
"rate": "0.02",
.......
}
Examples:
Python Example
import requests
import json
url = "https://console.springserve.com/api/v0/supply_tags/730124"
payload = ""
headers = {
'Authorization': 'yourAuthToken',
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
NodeJS Example
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://console.springserve.com/api/v0/supply_tags/730124',
'headers': {
'Authorization': 'yourAuthToken',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
Edit a Supply Tag
SDK
tag = springserve.supply_tags.get(28852) tag.name = "I want to change the name" changed = tag.save() changed.ok True
Note that when enabling post_imp_detection, you must also set at least one of post_imp_percentage_whiteops, post_imp_percentage_moat, post_imp_percentage_ias to >0 before saving your changes.
REST API
Method: PATCH
Endpoint URL: /api/v0/supply_tags/<id>
- id - (required, type: integer) ID of the supply tag.
Request:
PATCH /api/v0/supply_tags/730124
Content-Type: application/json
Authorization: "yourAuthToken"
{
"name": "I want to change the name"
}
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 730124,
"account_id": 391,
"name": "I want to change the name",
"active": true,
"rate": "0.02",
.......
}
Add Demand to a Supply Tag
SDK
tag = springserve.supply_tags.get(123456)
tag.demand_tag_priorities = [{'demand_tag_id':2345}]
saved_tag = tag.save()
print saved_tag.ok, saved_tag.demand_tag_priorities
True, [{'demand_tag_id':2345}]
REST API
Method: PATCH
Endpoint URL: /api/v0/supply_tags/<id>
Notes - You will need to pass back other demand_tag_priorities objects in order to not delete them
- id - (required, type: integer) ID of the supply tag.
Request:
PATCH /api/v0/supply_tags/730124
Content-Type: application/json
Authorization: "yourAuthToken"
{
"demand_tag_priorities": [
{
"demand_tag_id": 1110673
}
]
}
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 730124,
"account_id": 391,
"name": "I want to change the name",
.......
"demand_tag_priorities": [
{
"demand_tag_id": 1110673,
"priority": 1,
"tier": 1,
"locked": false,
"ratio": null,
"slot_number": 0,
"slot_order": "n/a"
}
}
.......
}
Duplicate a Supply Tag
Please note that this works for both Managed and Direct Connect tags.
SDK
In [1]: tag = springserve.supply_tags.get(28852) In [2]: dupe = tag.duplicate() In [4]: dupe.ok Out [4]: True In [5]: print dupe.id 65034
REST API
GET /api/v0/supply_tags/<id>/duplicate
Headers
Content-Type application/json Authorization "yourAuthToken"
Response
Status code 200
{
...
'id': 65034,
'name': 'I want to change the name',
'rate': '0.02',
...
}
Create a Direct Connect Supply Tag
SDK
In [1]: import springserve
In [2]: tag = springserve.connected_supply.new({'direct_connect':'true', 'supply_partner_id':10000, 'name': 'TEST API DC', 'rate': 0.02, 'demand_tag_priorities':[{'demand_tag_id':30420, 'priority':1}]})
In [3]: print tag.ok, tag.id
True, 28852
Note that for flat waterfalls, the tier parameter defaults to 1. Same goes for any demand tag included in demand_tag_priorities that does not specify the tier parameter.
REST API
POST /api/v0/connected_supply
Headers
Content-Type application/json Authorization "yourAuthToken"
Body (example)
{ |
Required parameters: name, demand_tag_priorities, supply_partner_id, direct_connect, rate
Response
Status code 200
{
'account_id': 1,
'active': True,
'allowed_player_sizes': [
's',
'm',
'l',
'u'
],
'country_codes': [],
'country_targeting': 'All',
'demand_tag_priorities': [
{
'demand_tag_id': 30424,
'locked': False,
'priority': 1,
'tier': 1
}
],
'detected_domain_targeting': False,
'detected_player_size_targeting': False,
'direct_connect': False,
'dma_codes': [],
'dma_targeting': 'All',
'domain_list_ids': [],
'domain_targeting': 'All',
'environment': 'desktop',
'flash_vpaid_enabled': False,
'id': 65034,
'js_vpaid_enabled': True,
'js_vpaid_flash_enabled': True,
'key_ids': [],
'name': 'I want to change the name',
'optimization': {
'active': True,
'learn_pct': '1.0',
'settings': {
'lookback_minutes': '60',
'metric': 'fill_speed',
'minimum_requests': '250'
},
'version': ''
},
'payment_terms': 'CPM',
'player_size_targeting': 'All',
'post_imp_detection_enabled': True,
'pre_bid_blocking_enabled': True,
'pre_bid_blocking_components': ['whiteops', 'springserve'],
'rate': '0',
'segment_user_as': [],
'supply_group_id': None,
'supply_partner_id': None,
'supply_type': None,
'tag_health': None,
'targeting_supply_ids': [],
'targeting_supply_white_list': '',
'timeout': None,
'tracking_player_cost': False,
'updated_at': '2017-07-07T15:17:28.315Z',
'user_agent_devices': [],
'user_agent_operating_systems': []
}
Enabling a Supply Tag for Open Market
SDK
In [1]: import springserve In [2]: tag = springserve.supply_tags.get(123456) In [3]: tag.open_market_enabled = True In [4]: saved_tag = tag.save() In [5]: print saved_tag.ok, saved_tag.id True, 123456
REST API
PATCH /api/v0/supply_tags/<id>
Headers
Content-Type application/json Authorization "yourAuthToken"
Body (example)
|
Response
Status code 200
{
"id": 123456,
"account_id": 1,
"name": "Supply Tag with Open Market",
"active": true,
"rate": "1.0",
"domain_targeting": "All",
"app_name_targeting": "All",
"app_bundle_targeting": "All",
"ip_targeting": "All",
"country_targeting": "All",
"player_size_targeting": "All",
"dma_targeting": "All",
"allowed_player_sizes": [
"xs",
"s",
"m",
"l",
"xl",
"u"
],
"country_codes": [],
"domain_list_ids": [],
"app_name_list_ids": [],
"app_bundle_list_ids": [],
"ip_list_ids": [],
"dma_codes": [],
"user_agent_devices": [],
"user_agent_operating_systems": [],
"user_agent_browsers": [],
"updated_at": "2019-09-27T21:02:53.466Z",
"created_at": "2019-05-14T20:25:01.156Z",
"direct_connect": false,
"supply_label_ids": [],
"supply_partner_id": 244,
"supply_type": null,
"payment_terms": "CPM",
"tracking_player_cost": false,
"optimization": {
"active": true,
"version": null,
"learn_pct": "1.0",
"mode": "white_box",
"settings": {
"metric": "opportunity_fill",
"lookback_minutes": "60"
}
},
"timeout": null,
"environment": "desktop",
"js_vpaid_enabled": false,
"detected_domain_targeting": false,
"detected_player_size_targeting": false,
"targeting_supply_ids": [],
"targeting_supply_white_list": "",
"post_imp_detection_enabled": false,
"post_imp_percentage_whiteops": 0,
"post_imp_percentage_ias": 0,
"post_imp_percentage_moat": 0,
"post_imp_percentage_protected": 0,
"post_imp_percentage_forensiq": 0,
"pre_bid_blocking_enabled": false,
"pre_bid_blocking_components": [],
"tag_health": null,
"key_ids": [],
"vpaid_none_allow_vpaid_demand": true,
"rpm_floor": "1.2",
"rpm_floor_openrtb": true,
"openrtb_floor": "1.2",
"tier_0_broadfall": true,
"tier_1_broadfall": true,
"tier_2_broadfall": true,
"tier_3_broadfall": true,
"tier_4_broadfall": true,
"tier_5_broadfall": true,
"vast_version": "3.0",
"min_aspect_ratio": null,
"max_aspect_ratio": null,
"bulk_add_enabled": true,
"format": "video",
"allow_traffic_exclusions": true,
"open_market_enabled": true,
"auto_add_external_bidders": false,
"evaluation_learn_pct": "50.0",
"tag_pixels": [],
"demand_tag_priorities": [
{
"demand_tag_id": 21892,
"priority": 1,
"tier": 0,
"locked": false
}
],
"give_up_percents": [],
"budgets": [],
"frequency_caps": [],
"open_market_external_bidders": [
{
"other_account_id": 20,
"openrtb_floor": null
},
{
"other_account_id": 23,
"openrtb_floor": null
},
{
"other_account_id": 27,
"openrtb_floor": null
},
{
"other_account_id": 14,
"openrtb_floor": null
},
{
"other_account_id": 55,
"openrtb_floor": null
},
{
"other_account_id": 56,
"openrtb_floor": null
},
{
"other_account_id": 28,
"openrtb_floor": null
},
{
"other_account_id": 15,
"openrtb_floor": null
},
{
"other_account_id": 3,
"openrtb_floor": null
},
{
"other_account_id": 58,
"openrtb_floor": null
},
{
"other_account_id": 46,
"openrtb_floor": null
},
{
"other_account_id": 4,
"openrtb_floor": null
},
{
"other_account_id": 62,
"openrtb_floor": null
},
{
"other_account_id": 17,
"openrtb_floor": null
},
{
"other_account_id": 65,
"openrtb_floor": null
},
{
"other_account_id": 64,
"openrtb_floor": null
},
{
"other_account_id": 80,
"openrtb_floor": null
},
{
"other_account_id": 79,
"openrtb_floor": null
},
{
"other_account_id": 81,
"openrtb_floor": null
}
]
}
NOTE: Enabling Open Market in the API without specifying bidders will add all eligible bidders.
Adding Event Pixels to a Supply Tag
SDK
In [1]: import springserve
In [2]: tag = springserve.supply_tags.get(123456)
In [3]: tag.tag_pixels = [{'pixel_type':'AdImpression', 'pixel_url':'https://springserve.com/',
'pixel_format':'image'}]
In [4]: saved_tag = tag.save()
In [5]: print saved_tag.ok, saved_tag.tag_pixels
True, [{'id': 244, 'pixel_type': 'AdImpression', 'pixel_url': 'https://springserve.com/',
'pixel_format': 'image', 'created_at': '2021-03-19T14:30:06.675Z'}]
The fields for 'pixel_type' are the following:
Impression: 'AdImpression'
Start: 'AdVideoStart'
1st Quartile: 'AdVideoFirstQuartile'
Midpoint: 'AdVideoMidpoint'
3rd Quartile: 'AdVideoThirdQuartile'
Complete: 'AdVideoComplete'
Click: 'AdClickThru'
Fields for 'pixel_format':
Image URL: 'image'
Javascript URL: 'js'
REST API
PATCH /api/v0/supply_tags/<id>
Headers
Content-Type application/json Authorization "yourAuthToken"
Body (example)
|
Response
Status code 200
{
"id": 123456,
"rate": "1.0",
...
"tag_pixels": [
{
"id":311732,"pixel_type":"AdImpression",
"pixel_url":"https://springserve.com/",
"pixel_format":"image","created_at":"2021-03-24T15:40:03.935Z"
}
],
...
}
Adding Open Market Bidders to a Supply Tag
SDK
In [1]: import springserve
In [2]: tag = springserve.supply_tags.get(123456)
In [3]: tag.open_market_external_bidders = [{'other_account_id':58},{'openrtb_floor': 2.2, 'other_account_id':4},{'other_account_id':28}]
In [4]: saved_tag = tag.save()
In [5]: print saved_tag.ok, saved_tag.id
True, 123456
The 'other_account_id' represents the bidder account id to add to the open market for this supply tag. There's an optional 'openrtb_floor' field that allows you to set a specific floor for a bidder (otherwise, the default Open Market floor is used).
REST API
PATCH /api/v0/supply_tags/<id>
Headers
Content-Type application/json Authorization "yourAuthToken"
Body (example)
|
Response
Status code 200
{
"id": 123456,
"account_id": 1,
"name": "Supply Tag with Open Market",
"active": true,
"rate": "1.0",
"domain_targeting": "All",
"app_name_targeting": "All",
"app_bundle_targeting": "All",
"ip_targeting": "All",
"country_targeting": "All",
"player_size_targeting": "All",
"dma_targeting": "All",
"allowed_player_sizes": [
"xs",
"s",
"m",
"l",
"xl",
"u"
],
"country_codes": [],
"domain_list_ids": [],
"app_name_list_ids": [],
"app_bundle_list_ids": [],
"ip_list_ids": [],
"dma_codes": [],
"user_agent_devices": [],
"user_agent_operating_systems": [],
"user_agent_browsers": [],
"updated_at": "2019-09-27T21:02:53.466Z",
"created_at": "2019-05-14T20:25:01.156Z",
"direct_connect": false,
"supply_label_ids": [],
"supply_partner_id": 244,
"supply_type": null,
"payment_terms": "CPM",
"tracking_player_cost": false,
"optimization": {
"active": true,
"version": null,
"learn_pct": "1.0",
"mode": "white_box",
"settings": {
"metric": "opportunity_fill",
"lookback_minutes": "60"
}
},
"timeout": null,
"environment": "desktop",
"js_vpaid_enabled": false,
"detected_domain_targeting": false,
"detected_player_size_targeting": false,
"targeting_supply_ids": [],
"targeting_supply_white_list": "",
"post_imp_detection_enabled": false,
"post_imp_percentage_whiteops": 0,
"post_imp_percentage_ias": 0,
"post_imp_percentage_moat": 0,
"post_imp_percentage_protected": 0,
"post_imp_percentage_forensiq": 0,
"pre_bid_blocking_enabled": false,
"pre_bid_blocking_components": [],
"tag_health": null,
"key_ids": [],
"vpaid_none_allow_vpaid_demand": true,
"rpm_floor": "1.2",
"rpm_floor_openrtb": true,
"openrtb_floor": "1.2",
"tier_0_broadfall": true,
"tier_1_broadfall": true,
"tier_2_broadfall": true,
"tier_3_broadfall": true,
"tier_4_broadfall": true,
"tier_5_broadfall": true,
"vast_version": "3.0",
"min_aspect_ratio": null,
"max_aspect_ratio": null,
"bulk_add_enabled": true,
"format": "video",
"allow_traffic_exclusions": true,
"open_market_enabled": true,
"auto_add_external_bidders": false,
"evaluation_learn_pct": "50.0",
"tag_pixels": [],
"demand_tag_priorities": [
{
"demand_tag_id": 21892,
"priority": 1,
"tier": 0,
"locked": false
}
],
"give_up_percents": [],
"budgets": [],
"frequency_caps": [],
"open_market_external_bidders": [
{
"other_account_id": 27,
"openrtb_floor": 12.0
},
{
"other_account_id": 4,
"openrtb_floor": null
}
]
}
Adding Pods to a Supply Tag
SDK
In [1]: import springserve
In [2]: tag = springserve.supply_tags.get(123456)
In [3]: tag.pod = {'max_duration': 300, 'custom_ad_slot_duration': True,'unfilled_slot_opt_out_enabled': False, 'ad_slots': [{
'position': 3
}, {
'position': 2
}, {
'position': 1
}]
}
In [4]: saved_tag = tag.save()
In [5]: print saved_tag.ok, saved_tag.id
True, 123456
Max_unfilled_slots is initially null, you can set it to an integer between 0 and 2
To EDIT a pod you have to add the pod id to the request
REST API
PUT /api/v0/supply_tags/<id>
Headers
Content-Type application/json
Authorization "yourAuthToken"
Body (example)
{ "pod":{ "max_duration": 200, "custom_ad_slot_duration": true, "unfilled_slot_opt_out_enabled": false, "max_unfilled_slots":0, "ad_slots": [{"position": 3, "min_duration":40, "max_duration":60}, {"position": 2}, {"position": 1}] } } |
Response
Status code 200
{
"id": 123456,
"account_id": 1,
...
"pod": {
"id": 345,
"max_duration": 200,
"custom_ad_slot_duration": true,
"unfilled_slot_opt_out_enabled": false,
"max_unfilled_slots": null,
"ad_slots": [
{
"id": 764,
"position": 1,
"min_duration": null,
"max_duration": null
},
{
"id": 763,
"position": 2,
"min_duration": null,
"max_duration": null
},
{
"id": 762,
"position": 3,
"min_duration": 40,
"max_duration": 60
}]
}
}
Object Descriptions
| Object Name | Value Type | Object Description | Example | Notes |
|---|---|---|---|---|
| id | integer | supply tag ID | 25530 | |
| account_id | integer | account ID | 391 | |
| name | string | supply tag name | "API Example Router" | |
| active | boolean | status of supply tag | true / false | |
| rate | integer | rate | 70 / 10.2 | See "payment_terms" CPM - CPM rate paid for inventory. CPM Rev Share - rate at which you pay revenue share for inventory. % Dynamic - margin added to demand. % |
| payment_terms | string | payment terms | "Rev-Share" / "CPM" / "Dynamic" | Dynamic - Pricing will be passed via the {{PRICE_PAID}} macro. Please make sure this macro is implemented in your exported tag. Price must be a CPM value. |
rpm_floor | integer | RPM floor rate | 12.24 | |
rpm_floor_openrtb | boolean | DC OM floor active | true / false | DC only |
rpm_floor_hb | boolean | apply floor to header bidder demand | true / false | |
openrtb_floor | integer | DC OM floor rate | 13.24 | DC only |
| environment | string | supply device environment type | "desktop" / "mobile_web" / "in_app" / "ctv" | |
| domain_targeting | string | domain targeting type | "All" / "Allowlist" / "Blocklist" | use for environment "desktop" or "mobile_web". use in conjunction with domain_list_ids |
| domain_list_ids | array integer | ID of domain lists | [211852, 123456] | created under targeting tab in UI. use in conjunction with domain_targeting |
| app_name__targeting | string | app name targeting type | "All" / "Allowlist" / "Blocklist" | use for environment "in_app" or "ctv". use in conjunction with app_name_list_ids |
| app_name_list_ids | array | ID of app name lists | [527, 5352] | created under targeting tab in UI. use in conjunction with app_name_targeting |
| app_bundle_targeting | string | app bundle targeting active | "All" / "Allowlist" / "Blocklist" | use for environment "in_app" or "ctv". use in conjunction with app_bundle_list_ids |
| app_bundle_list_ids | array integer | ID of app bundle lists | [250761, 247375] | created under targeting tab in UI. use in conjunction with app_bundle_targeting |
| ip_targeting | string | IP targeting active | "All" / "Allowlist" / "Blocklist" | use in conjunction with ip_list_ids |
| ip_list_ids | array integer | ID of IP lists | [164, 907] | created under targeting tab in UI. use in conjunction with ip_targeting |
| advertiser_domain_targeting | string | advertiser domain targeting type | "All" / "Allowlist" / "Blocklist" | use in conjunction with advertiser_domain_list_ids |
| advertiser_domain_list_ids | array integer | ID of advertiser domain lists | [433, 484] | created under targeting tab in UI. use in conjunction with advertiser_domain_targeting |
| blocking_unknown_advertiser_domains | boolean | toggle to block unknown advertiser domains | true / false | Blocks all SSHB and Open Market demand tags that don't return an Advertiser Domain in the VAST response |
ignore_advertiser_domain_targeting | boolean | advertiser domain target override | true / false | pod settings removes all advertiser domain targeting, allowing all to serve. sets duplicate creatives to allowed. |
| pod | object | pod settings | { "id": 67830, "max_duration": 300, "custom_ad_slot_duration": false, "unfilled_slot_opt_out_enabled": true, "max_unfilled_slots": 2, "duplicate_creatives": true, "duplicate_adomains": true, "ad_slots": [ { "id": 36713, "position": 3, "min_duration": 10, "max_duration": 30 }, { "id": 36712, "position": 2, "min_duration": 10, "max_duration": 30 }, { "id": 36711, "position": 1, "min_duration": 10, "max_duration": 30 } ] } | default - null "custom_ad_slot_duration" - defines dynamic pod or predefined pod settings true - custom ad slot duration false - dynamic ad slot duration |
waterfall_slot_build | boolean | waterfall build | true / false | build waterfall as slot or tag true - slot false - tag |
allow_duplicate_creatives | boolean | allow duplicate creatives | true / false | pod settings |
allow_duplicate_adomains | boolean | allow duplicate advertiser domains | true / false | pod settings |
ignore_iab_targeting | boolean | IAB category targeting override | true / false | pod settings allows all categories to serve |
creative_brandsafe_override | boolean | allow non brand safe creatives to serve | true / false | brand safe blocks by default - gambling, nicotine replacement, lingerie, weapons/warfare, contraception |
creative_allow_objectionable | boolean | allow restricted audience ads | true / false | restricted blocks by default - violence, sexual content, weightloss, political |
| post_imp_detection_enabled | boolean | post impression detection active | true / false | specify the portion of impressions on which to run verification. sampling rates are independant per verification provider. use in conjunction with below post_imp_percentage fields |
post_imp_percentage_whiteops | integer | post impression percentage Whiteops (HUMAN) | 0 - 100 | use in conjunction with below post_imp_detection_enabled |
post_imp_percentage_ias | integer | post impression percentage IAS | 0 - 100 | use in conjunction with below post_imp_detection_enabled |
post_imp_percentage_moat | integer | post impression percentage MOAT | 0 - 100 | use in conjunction with below post_imp_detection_enabled |
post_imp_percentage_protected | integer | post impression percentage Protected | 0 - 100 | use in conjunction with below post_imp_detection_enabled |
post_imp_percentage_forensiq | integer | post impression percentage ForensIQ | 0 - 100 | use in conjunction with below post_imp_detection_enabled |
pre_bid_blocking_enabled | boolean | pre-bid filtering active | true / false | |
pre_bid_blocking_components | array string | pre-bid filtering providers | ["springserve", "whiteops", "protected"] | specify percentages using post_imp_percentage for providers |
| key_ids | array integer | KVPs included in reporting | [2102, 3124] | max 15 reporting keys per router |
| note | string | notes | "notes about router" | |
| min_aspect_ratio | string | min aspect ratio as float | "0.563" | 9:16 (0.56) |
max_aspect_ratio | string | max aspect ratio as float | "1.777" | 16:9 (1.78) |
| format | string | ad format type | "video" / "tile" / "audio" | |
| third_party_overrides | boolean | n/a | ||
| player_sizes | array integer | player size targeting | ["xs", "s", "m", "l", "xl", "u"] | |
| user_agent_devices | array string | allowed device targeting | ["Computer", "Mobile Web", "Mobile In-app", "Tablet Web", "Tablet In-app", "Games Console", "CTV", "Set-top Box", "Other"] | [] - empty array targets all devices |
| user_agent_brands | array string | allowed device brand targeting | ["Samsung", "Philips", "Panasonic", "Hisense", "Vizio", "Sanyo", "Magnavox", "Android TV", "LG", "Comcast", "Other Connected TV", "Apple TV", "Roku", "Fire TV", "Chromecast", "Smartcast by Vizio"] | [] - empty array targets all brands |
user_agent_operating_systems | array string | allowed OS targeting | ["Android", "iOS", "Linux", "Windows", "Mac OS X", "Chrome OS", "Fire OS", "Xbox OS", "VIZIO SmartCast", "Tizen", "Roku OS", "webOS TV", "Other"] | [] - empty array targets all operating systems |
| user_agent_browsers | array string | allow browser targeting | ["Chrome", "Edge", "Firefox", "Safari", "IE", "Chromium", "Chrome Mobile", "WebView", "Android", "Samsung Browser", "Facebook on Android", "Facebook on iOS", "Mobile Safari", "Roku App"] | [] - empty array targets all browsers |
segment_targeting_enabled | boolean | audience segment targeting active | true / false | use in conjunction with segment_groups |
| segment_groups | array object | audience segment targeting groups and types | [ { "id": 28839, "group": "1", "white_list": true, "segment_group_type": "segments", "segment_ids": [ 10869, 10004 ], "partner_segment_ids": [] } ] | use multiple groups for OR targeting and same group for AND targeting. "whitelist": true/false, for allow or block user segments |
media_file_mime_type_targeting | boolean | mime type targeting | true / false | |
media_file_mime_types | array string | allowed mime types | ["application/dash+xml", "application/javascript", "application/json", "application/octet-stream", "application/vnd.apple.mpegurl", "application/x-mpegURL", "application/x-shockwave-flash", "video/3gpp", "video/hls", "video/m3u8", "video/mov", "video/mp4", "video/mpeg", "video/ogg", "video/quicktime", "video/webm", "video/wmv", "video/x-flv", "video/x-m4v", "video/x-ms-wmv"] | |
blocking_unknown_media_file_mime_type | boolean | block unknown mime types | true / false | |
media_file_duration_targeting | boolean | media file targeting active | true / false | set media_file_min_duration and media_file_max_duration to null for all durations when false. specify min and max durations for true |
media_file_min_duration | integer | media file targeting min duration | 10 / null | unit:seconds |
media_file_max_duration | integer | media file targeting max duration | 30 / null | unit:seconds |
blocking_unknown_media_file_duration | boolean | block unknown durations toggle | true / false | |
media_file_bit_rate_targeting | boolean | media file bitrate targeting active | true / false | set media_file_min_bit_rate and media_file_max_bit_rate to null for all bitrates when false. specify min and max bitrates for true |
media_file_min_bit_rate | integer | media file bitrate targeting min bitrate | 1000 / null | unit:kbps |
media_file_max_bit_rate | integer | media file bitrate targeting max bitrate | 5000 / null | unit:kbps |
blocking_unknown_media_file_bit_rate | boolean | block unknown bitrates toggle | true / false | |
targeted_macros_enabled | boolean | content attribute targeting active | true / false | |
targeted_macros | array object | content attribute targeting | [ { "id": 20135, "macro_param": "{{CHANNEL_NAME}}", "list_type": "white_list", "source_type": "values", "targeted_values": [ "12345" ], "parameter_list_ids": [], "param_required": false, "created_at": "2023-07-18T11:41:40.835Z" } ] | "source_type": "values" / "lists" for lists use "parameter_list_ids" to specify id's |
blocking_unknown_media_containers | boolean | block unknown media containers | true / false | |
media_file_media_container_targeting | boolean | allowed media containers targeting active | true / false | |
media_file_media_containers | array string | allowed media containers | [ "MPEG-41", "MPEG-42" ] | |
media_file_audio_volume_targeting | boolean | media file audio volume targeting active | true / false | |
media_file_audio_volume_mean | integer | media file audio volume targeting mean volume | -17 | unit: dBs |
blocking_unknown_media_file_audio_volume | boolean | block unknown media file audio volume | true / false | |
blocking_vast_containing_companion_ads | boolean | block vast containing companion ads | true / false | |
removing_companion_ads_from_vast | boolean | remove companion ads from vast containing companion ads | true / false | blocking_vast_containing_companion_ads supersedes removing_companion_ads_from_vast |
| country_source | string | country targeting source | "list" / "values" | use in conjunction with either country_list_ids if value is "lists" or country_codes if value is "values" |
country_list_ids | array integer | ID of country lists | [184] | use in conjunction with country_source with value "lists". |
country_white_list | boolean | country targeting include / exclude | true / false | true - include false - exclude |
country_codes | array string | country code | ["UK", "US", "IT"] | ISO 3166 Alpha-2 codes |
| dma_source | string | DMA targeting source | "list" / "values" | use in conjunction with either country_list_ids if value is "lists" or country_codes if value is "values" |
dma_list_ids | array integer | ID of DMA lists | [199] | use in conjunction with country_source with value "lists". |
dma_white_list | boolean | DMA targeting include / exclude | true / false | true - include false - exclude |
dma_codes | array integer | DMA ID | [525] | |
postal_code_targeting | string | postal code targeting type | "All" / "Include" / "Exclude" | |
postal_codes | array string | postal code values | "10001", "GB:SW1A", "FR:75001", "AR:B1228" | |
postal_code_source | string | postal code source | "values" / "lists" | use "values" for "postal_codes" or "lists" with "postal_code_list_ids" |
postal_code_list_ids | array integer | postal code list | [1235] | |
creative_language_allow_list | boolean | creative language targeting type | " " / true / false | " " - all true - allowlist false - blocklist |
creative_language_codes | array string | creative language targeting list | ["en-GB", "en-US", "fr-FR"] | |
creative_language_block_unknown | boolean | block unknown creative language | true / false | |
| supply_partner_id | integer | ID of supply partner assigned | 66463 | |
supply_label_ids | array integer | supply label ID's | [1051] | Found on settings tab → More Info → Labels: |
supply_type | string | supply type | "null" / "Outstream" | "null" - instream "outstream" - outstream |
tracking_player_cost | boolean | track player costs based on player loads and not impressions | true / false | see "supply_type" for outstream specific setting |
| direct_connect | boolean | direct connect status | true / false | see "supply_class" object |
supply_class | integer | supply class | 1 / 2 / 3 | 1 - tag 2 - direct connect 3 - bidlink for 2 see "direct_connect" object |
targeted_iab_category_white_list | boolean | IAB tier 1 targeting active | true (allowlist) / false (blocklist) / null (all categories) | |
targeted_iab_categories | array string | IAB tier 1 category name | ["Automotive"] | IAB content taxonomy download |
targeted_iab_tier2_categories_white_list | boolean | IAB tier 2 targeting active | true (allowlist) / false (blocklist) / null (all categories) | |
targeted_iab_tier2_category | array string | IAB tier 2 category name | ["Auto Body Styles", "Automotive"] | IAB content taxonomy download |
| dnt_values | array string | DNT (do not track) targeting | ["true", "false", "empty"] | |
dnt_param_required | boolean | DNT (do not track) parameter required | true / false | |
| lmt_values | array string | LMT (limit tracking) targeting | ["true", "false", "empty"] | |
lmt_param_required | boolean | LMT (limit tracking) parameter required | ["true", "false", "empty"] | |
us_privacy_supply_white_list | boolean | US privacy targeting active | true / false | |
us_privacy_param_required | boolean | US privacy parameter required | true / false | |
us_privacy_values | array string | US privacy values | ["1yyy"] | |
| gdpr_supply_param_required | boolean | supply from GDPR country flag required | true / false | |
| gdpr_supply_values | array string | supply from GDPR country flag targeting values | ["true", "false", "empty"] | |
gdpr_consent_param_required | boolean | GDPR consent string parameter required | true / false | |
gdpr_consent_string_values | array string | GDPR consent string targeting | ["valid", "invalid", "empty"] | valid - valid consent string invalid - invalid consent string |
| coppa_values | array string | allowed COPPA values | ["true", "false", "empty"] | |
| coppa_param_required | boolean | COPPA parameter required | true / false | |
audited_creative_statuses | array string | allowed audited creative statuses | ["pending", "approved", "rejected"] | |
optimization | object | optimisation | { "active": true, "version": "", "learn_pct": "1.0", "mode": "black_box", "settings": { "metric": "rpm", "lookback_minutes": "60" } } | Recommended optimisation methods are RPM for singles ad requests and revenue per second for pods. |
| timeout | integer | timeout of supply tag | null / 3000 | unit: ms null for default set this lower than player or supply partner timeout |
js_vpaid_enabled | boolean | response type supported | true / false | |
vpaid_none_allow_vpaid_demand | boolean | allow vpaid demand | true / false | if js_vpaid_enabled is true |
| vast_version | string | max VAST version supported | "3.0" / "2.0" | |
obfuscate_ip_address_enabled | boolean | obfuscate IP | true / false | see obf_ip_flags |
obf_ip_flags | array string | obfuscate IP on opt out | ["coppa", "gdpr", "dnt"] | |
budget_timezone | string | timezone of budget | "America/New_York" / "Europe/London" | tz database time zones |
budgets | ||||
| day_parting | array boolean | day parting schedule | truncated example for Sunday hours 00 to 07 day parting. [true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], ........... | when active day parting is broken into 7 arrays of 24 fields of true / false to indicate the day parting window. week starts Sunday true - active false - inactive day_parting_users_timezone is not in API |