Skip to main content

Upload Creative and Create a Campaign

IQM’s REST API enables you to interact with most of our platform's applications.

The following endpoints will be used to upload a Creative, create an insertion order, create a PG deal, and start a Campaign:

POST /api/v3/ua/login
GET /api/v3/master/creativeTypes
POST /api/v2/crt/add/image/banner/creative
POST /api/v3/crt/basic/list
POST /api/v3/cmp/io/add
GET /api/v3/master/creativeTypes
POST /api/v3/cmp/pg/campaigns/add
POST /api/v3/cmp/pg/campaigns/add
GET /api/v2/cmp/campaign/{campaignId}

About IQM Campaign & Creative

The IQM APIs provide access to create Insertion Orders, PG Deals, Campaigns and upload Creative in Image, Video, Audio, HTML, XLSX, or CSV formats. The APIs can be used to connect to the desired applications.

Once an Insertion Order and PG Deal are created, an uploaded and processed Creative can be used for creating and running advertising Campaigns.

Before You Begin

To upload a Creative and create a Campaign, the following are required:

  1. An Account On the IQM Platform
    • See Before You Begin section to create an account and request a Client ID and Client Secret
  2. Image, Video, Audio, HTML, VAST, DAAST, CSV, or XLSX File to Upload Creative
info

File requirements for Creative file:

  • 2MB for JPG, JPEG, PNG
  • 750KB for GIF
  • 400MB for MOV, MP4
  • 100MB for MP3, WAV, OGG, MPEG

For more information on VAST and DAAST XML format specifications, please see iab Tech Lab's Documentation.

Sample CSV file: https://app.iqm.com/creatives/example-files/sample_html_creatives.csv

Upload Creative and Create a Campaign Using the IQM API

This quickstart will cover how to create a Campaign and upload a Creative.

The minimum requirements to perform this task are: logging in with authentication credentials, uploading a Creative, and creating a Campaign. Once these steps are accomplished, more can be learned about IQM's API through the Guidelines pages.

  1. Log In
    • Optional if you have already logged in and have a token
  2. Upload Creative
    • 2.1: Request Creative Types (Optional if you already know supported/desired types)
    • 2.2: Upload Creative (Optional if already uploaded before)
    • 2.3: Check Creative status
  3. Create Insertion Order
    • Optional if already created
  4. Create PG Deal
    • 4.1: Request Exchange List
    • 4.2: Create PG Deal
  5. Create a Campaign
    • 5.1 Create a Campaign using Creative, provide necessary targeting parameters
    • 5.2 Check Campaign's status

Step 1: Log in

POST /api/v3/ua/login

To log in, the Authentication: Basic header is required. The Login API returns an OAuth-compliant response with an Organization Workspace ID (owId), a unique identifier for each organization. This ID will be used for any further API communications.

For further information see the complete Login API Documentation.

Headers
Authentication
string required
Authentication bearer token
See Authentication Guide
X-IAA-HOST
string required
Workspace URL
Request Schema
grantType
string required
OAuth Grant Types
email
string required
User account email
password
string required
User account password
Request Schema
{
"grantType": "password",
"email": "pratik.t+ihp@iqm.com",
"password": "123456"
}
Response 200
{
"success": true,
"data":
{
"access_token": "106adb25-37b0-4cab-8381-d682fe7cc3c8",
"refresh_token": "eac4c1f6-781e-4b04-baff-9c2e415d1f64",
"scope": "read write",
"token_type": "bearer",
"expires_in": 35999,
"owId": 200001
}
}
More Response Samples
Response 400
{
"success": false,
"data":
{
"status": "On Hold",
"reason": "The particular account is kept on hold due to missed payment dates for last 3 months.",
"supportEmail": "support@iqm.com"
},
"errorObjects":
[
{
"error": "User is not allowed to access provided customer",
"reason": "User is not associated with any active organization."
}
]
}
Response 403
{
"success": false,
"errorObjects":
[
{
"error": "User doesn't exist or user is not allowed to provided workspace."
}
]
}

Step 2: Upload Creative

Step 2.1 Request Creative Types

GET /api/v3/master/creativeTypes

To upload a Creative, a Creative Type must be provided. Use the Creative Type list endpoint to request a full list of allowed Creative Types.

For further information see the complete Creative Types API Documentation.

Headers
Authentication
string required
Authentication Bearer Token
See Authentication Guide
X-IAA-OW-ID
integer required
Organization Workspace ID Header
Response 200
{
"success": true,
"data": {
"data": [
{
"id": 17,
"name": "Audio",
"rtbTypeId": 2
},
{
"id": 15,
"name": "Native",
"rtbTypeId": 4
},
{
"id": 14,
"name": "Video",
"rtbTypeId": 3
},
{
"id": 13,
"name": "HTML",
"rtbTypeId": 1
},
{
"id": 11,
"name": "Image",
"rtbTypeId": 1
}
],
"totalRecords": 5,
"filteredRecords": 5
}
}
More Response Samples
Response 500
{
"statusCode": 500,
"responseObject": {
"errorMsg": "Internal server error",
"errorCode": 500
}
}

Step 2.2 Upload Creative

POST /api/v3/crt/creatives

When uploading a Creative, a file and Creative parameters (like tracking pixel and click URL) can be provided.

Please refer to MDN Documentation on form data format.

info

For further information see the complete API Documentation:

Headers
Authentication
string required
Authentication bearer token
See Authentication Guide
X-IAA-OW-ID
integer required
Organization Worskpace ID Header
content-type
string required
Media type of the resource
Query Parameters
creativeRequest
string
This parameter accepts a Map of UUIDs to Creative details. Each UUID corresponds to a single Creative. The metadata includes information such as Creative name, external Creative ID, Creative type, and click URL. Additionally, the Creative files are sent as multipart form data
creativeFiles
array of strings
Array of Creative files uploaded as multipart files. These files will be used for creating the Creatives. Each file is processed according to its type (image, video, etc.)
Request Sample (Form Data)
------WebKitFormBoundaryyTwoz48E2hTuXZoX
Content-Disposition: form-data; name="dspId"

------WebKitFormBoundaryyTwoz48E2hTuXZoX
Content-Disposition: form-data; name="advertiserId"

------WebKitFormBoundaryyTwoz48E2hTuXZoX
Content-Disposition: form-data; name="creativeImageMetadata"

{"8a9ab848-b302-40a6-bea1-17f7aca6f362":{"originalFileName":"Screenshot 2023-12-28 at 2.51.28 PM.png","creativeName":"Creative","clickUrl":"https://iqm.com","width":408,"height":364}}
------WebKitFormBoundaryyTwoz48E2hTuXZoX
Content-Disposition: form-data; name="creativeFiles"; filename="8a9ab848-b302-40a6-bea1-17f7aca6f362.png"
Content-Type: image/png

‰PNG

IHDR˜lñ8¯Z
±iCCPICC ProfileH‰•—Té€ÿ™ôÐ‘NèM"@J-té *! J)ؕÅ\
*" ¬èRDÁFµcÁ¢ØûYDÔu±`Cå
p»ûÎ{ï¼{Νû;÷¿÷þsæŸs²[(̄•ÈHDþÞ´¸øn€ g±9b!#<< 2mÿ.îhÂÞ´žÈõï÷ÿ«¨pybP8ÂÉ\1'
ácˆ¾çEPõˆßh‰D8Á=«‰–Mp꿟àäIFã'c¢"˜ë€'±Ù¢TH戟–ËIEò¶pù„óöÈÊÊæ"܎°9#Dx"?=ù/yRÿ–3Yž“ÍN•óÔ^&ïÃ
3Ùùÿçãøߒ•)®aŠ()MX¤/è^FvœÉ¡aÓÌçNÆOrš4 zš9bfÂ4sÙ>Aòµ™¡ÁӜÂ÷cÉóHXQÓÌûFN³(;B^+EÄdL3[4SWš-÷§ñXòüiQ±ÓœË fqFdÐLSîI#äýóþÞ3uýä{Ïÿe¿|–|­$-*@¾wöLÿ<c&§8Nޗçã;-J¼åµ„™áòx^¦¿Ü/΍”¯• /äÌÚpù3Lg†O3ˆ \Àـ|+B Ø _Â˓Llˆ™-ÌñSÓ$4rÒx4–€c3›fokïÀŝz-ÞQ'Ï#D½2ã[ۀ{Çøøøñ_àu'@l™ñ™/@y€K'8RQî”=qÁ _%ä› ô€0ÖÀ87à|A Q ,²€,ËÀjPJÀf°T€j°Ôƒƒàh'ÀYp\×ÁmðÈÀ x FÀ0A"CH҇L +È¢C/E@ñP”
)´Z
•@¥P´j€CÐYè2Ô݇ú¡aè-ôFÁ$X
Ö�Má90fÀAp¼N�sà¸Þ—Ã5ð¸>
_�oÃ2ø%<Š(e€²FÑQLT*•‚¡V ŠQe¨TªÕº‰’¡^¡>£±h
š†¶F»¡ÐÑh:½½]®G·¢Ï£o¢ûÑ#èï2Fc�qÅ°0q˜TÌL¦S‹iÁ\ÀÜÆb>`±X*ÖëŒ
ÀÆcÓ±K±°»°ÍØ3Ø>ìv‡Ãiâ¬pî¸0'ÁávâàNãnàqŸð
x}¼=ޟ€à×àËðûñ§ð7ðCø1‚2Á„àJ#p ù„M„}„NÂ5 aŒ¨B4#º£ˆéÄÕÄrbñññ‚‚‚¡‚‹Â|¾Â*�r�C
—ú>“TI–$&)‘$%m$Ցΐî“Þ‘ÉdS²9,!o$7Ï‘Ÿ?)RmYŠ\ŕŠ•Š­Š7_+”L”J‹”
”Ê”Ž*]Sz¥LP6Uf*³•W(W*w(ßUU¡¨Ø©„©d©lPÙ¯rYå¹*NÕTÕW•«Z¨ºWõœêE1¢0)ÊZÊ>ÊÊ VÍL¥–®V¢vP­WmD]U}®zŒzžz¥úIuE5¥²¨™ÔMÔ#Ô;Ô/³tg1fñf­ŸÕ4ëƬÚ^<bfÛ_4iš¾šš[4Û4k¡µ,µæk-ÑÚ­uA땶š¶›6G»XûˆöXÇR'Bg©Î^Q]=]]¡îNÝsº¯ô¨z^zézÛôNé
ëSô=ôùúÛôOë¿ ©Ó´LZ9í<mÄ@Ç À@j°Ç ×`ÌÐÌ0Úpa³ác#¢Ý(Åh›Q—ш±¾qˆñ2ãFã&ºIšÉ“n“¦f¦±¦ëLÛLŸ›i˜±Ì
Ì͙“Í=ÍsÌkÌoY`-è»,®[–Ž–i–•–׬`+'+¾Õ.«¾Ù˜Ù.³³kfßµ&Y3¬s­­ûm¨6Á6klÚl^Ï1ž“0g˜î9ßmm3m÷Ù>´Sµ
´[c×i÷ÖÞҞc_iˁìàç°Ò¡ÝáÍ\«¹¼¹»çÞs¤8†8®sìrüæäì$rjrv6vNr®r¾KW£‡Ó7Ð/¹`\¼]Vºœpùìêä*q=âú§›µ[†Û~·çóÌæñæí›7ànèÎvßã.ó y$yüì!ó4ðd{Öx>õ2òâzÕz
1,錌×Þ¶Þ"ïïLWær攏¿O±O¯¯ªo´o�ï?C¿T¿F¿Gÿ¥þg0A[î²tYVk$Ð9pyàù RPdPEÐÓ`Ë`Qpg²5äQ¨I¨ ´-„±Â¶†=7
Ï ?>;?|~åügvË"º#)‘‹#÷G~ˆòŽÚõ0Ú<ZÝ£“Óó1Ö'¶4V7'nyÜÕx­x~|{.!&¡6atï‚í
‹ï,4[˜·ðò"­E™‹N.VZÌ^|4 “›´?é+;Œ]ÃMf%W%p˜œœ—\/î6î0ϝWÊJqO)Myžêžº5u8Í3­,íŸÉ¯à¿IH¯Nÿ˜–Q—1ž›Ùœ�ÏJÊê¨
2ç³õ²ó²û„VÂ"¡,Ç5g{Έ(HT+†Ä
Åí5d@ꑚKöçzäVæ~Z³ähžJž ¯'ß2}þP_Á/KÑK9K»–,[½¬9cùžÐŠä]+V®\忪~5quÆê_×Ø®)]ó~mìÚÎBÝÂU�?øÿÐX¤X$*º»Îm]õèù?ö®wX¿sý÷bnñ•Û’²’¯8®üd÷SùOãS6önrÚ´{3v³`ó-ž[êKUJ
J¶†lmÝFÛV¼íýöÅÛ/—Í-«ÞAÜ!Ý!+.oßi¼sóίi·+½+›«tªÖW}ÜÅÝuc·×î¦jÝê’ê/?ó¾·ÇOkiMÙ^ìÞܽÏöÅìëþ�þKC­VmIí·:A¬>¢þ|ƒsCÃ~ý›áFiãðÄ×úlo²nÚÓLm.9IShow more
Response 201
{
"success": true,
"data": {
"successData": {
"PS": "701388"
},
"failedData": {
"PF": "Creative file missing. Please attach the required file. : null"
}
}
}

Step 2.3 Check the Creative Status

GET /api/v3/crt/creatives/{creativeId}

To create a Campaign, the Creative must be processed and approved. This API checks a Creative's status. Use the creativeId (6 digit number under data parameter in response) retrieved from the previous step to get its details.

The Creative details endpoint returns a Status ID (highlighted in code sample). A status ID of 2 means the Creative is running, which is the necessary status to continue creating a Campaign. See the Get Creative Status List endpoint documentation for more information.

Headers
Authentication
string required
Authentication bearer token
See Authentication Guide
X-IAA-OW-ID
integer required
Organization Worskpace ID Header
Path Parameter
creativeId
array of integers
Creative ID
Response 200
{
"success": true,
"data": {
"creativeId": 686855,
"creativeName": "300x600-w23-01",
"rtbCreativeTypeId": 1,
"platformCreativeTypeId": 11,
"creativeStatusId": 2,
"creativeSource": "https://d3jme5si7t6llb.cloudfront.net/image/202760/efk0sUk_1730201855013.jpg",
"creativeCardSource": "https://d3jme5si7t6llb.cloudfront.net/Screenshots/202760/278x220/efk0sUk_1730201855013.jpg",
"clickUrl": "http://iqm.com",
"imageDetails": {
"pixelUrl": "http://pixel.com",
"creativeWidth": 300,
"creativeHeight": 600
},
"creativeSourceType": "file",
"creativePreviewFlag": 1,
"createdAt": 1730201855165,
"modifiedAt": "2024-10-29T06:10:15.000+00:00",
"userDetails": {
"uowId": 175891,
"userName": "Hardik",
"userEmail": "hardik.v+iqmsuper@iqm.com",
"hasApprovalAccess": true,
"hasEditAccess": true
},
"organizationDetails": {
"owId": 202760,
"organizationName": "AdWing"
}
}
}

Step 3: Create Insertion Order

POST /api/v3/cmp/io/add

Before a Campaign can be started an Insertion Order must be created. An Insertion Order is a contractual agreement that outlines the terms and conditions for one or more advertising Campaigns. Once created, a Campaign can be created and assigned to an Insertion Order. Read more about Insertion Orders.

The minimum required values for IO creation are as listed below. See a complete table of Resource Properties for all supported values.

Request Schema
ioName
string
Insertion Order name
ioStartTime
integer
Unix epoch timestamp (in milliseconds) of IO start time
ioEndTime
integer
Unix epoch timestamp (in milliseconds) of IO end time
ioTotalBudget
integer
IO budget
ioStatusID
integer
Status ID
ioTimeZoneId
integer
IO timezone ID
isAutoSumIoTotalBudget
boolean
If true Keeps IO budget same as total budget of all included campaigns
ioBudgetTypeId
integer
IO Budget Type ID
ioBudgetDistributionMethodId
integer
Budget distribution method ID
Request Sample (budget based IO)
{
"ioName": "IO Name 1",
"ioStartTime": 1690898148000,
"ioEndTime": 1690898888000,
"ioTotalBudget": 1000,
"ioTimeZoneId": 29,
"isAutoSumIoTotalBudget": true,
"ioBudgetTypeId": 1,
"ioBudgetDistributionMethodId": 1
}
Response 200
{
"success": true,
"data": {
"ioId": 123456,
"ioName": "IO Name 1",
"ioStartTime": 1690898148000,
"ioEndTime": 1690898888000,
"ioTotalBudget": 0,
"ioTimeZoneId": 29,
"ioBudgetTypeId": 1,
"ioBudgetDistributionMethodId": 1,
"isAutoSumIoTotalBudget": true,
"ioTotalImpressions": null
}
}

Step 4: Create PG Deal

Before a Campaign can be created, a Programmatic Guarantee (PG) Deal must be created first. A PG Deal is a direct negotiation between one publisher and one advertiser with a fixed amount of ad Inventory at a pre-negotiated price. Read more about PG Deals.

Step 4.1 Request Exchange List

GET /api/v3/master/exchanges

To create a PG Deal, an exchange must be provided. Use the master exchange endpoint to get a list of available exchanges.

Headers
Authentication
string required
Authentication bearer token
See Authentication Guide
X-IAA-OW-ID
integer required
Organization Worskpace ID Header
Response 200
{
"success": true,
"data": {
"data": [
{
"id": 90,
"name": "Aniview",
"urlName": "aniview"
},
{
"id": 89,
"name": "LoopMe",
"urlName": "loopme"
},
{
"id": 88,
"name": "One Tag",
"urlName": "onetag"
},
{
"id": 87,
"name": "Share Through",
"urlName": "sharethrough"
},
{
"id": 84,
"name": "Vidazoo",
"urlName": "vidazoo"
},
{
"id": 80,
"name": "Equativ",
"urlName": "equativ"
},
{
"id": 78,
"name": "Magnite",
"urlName": "magnite"
},
{
"id": 77,
"name": "Verve",
"urlName": "verve"
},
{
"id": 76,
"name": "Infolink",
"urlName": "infolink"
},
{
"id": 75,
"name": "Beachfront",
"urlName": "beachfront"
},
{
"id": 74,
"name": "Teads",
"urlName": "teads"
},
{
"id": 73,
"name": "Outbrain",
"urlName": "outbrain"
},
{
"id": 72,
"name": "Telaria",
"urlName": "telaria"
},
{
"id": 71,
"name": "33 Across",
"urlName": "ttacross"
},
{
"id": 69,
"name": "Media.net",
"urlName": "mnet"
},
{
"id": 66,
"name": "Unruly",
"urlName": "unruly"
},
{
"id": 47,
"name": "Index Exchange",
"urlName": "indexch"
},
{
"id": 46,
"name": "Triton Digital",
"urlName": "tdigital"
},
{
"id": 45,
"name": "Publisher Direct",
"urlName": "pbd"
},
{
"id": 41,
"name": "Column6",
"urlName": "adigital"
},
{
"id": 39,
"name": "Google DoubleClick",
"urlName": "adx"
},
{
"id": 37,
"name": "SpotXchange",
"urlName": "spotx"
},
{
"id": 19,
"name": "OpenX",
"urlName": "openx"
},
{
"id": 16,
"name": "Pubmatic",
"urlName": "pubmatic"
},
{
"id": 11,
"name": "Smaato",
"urlName": "smaato"
},
{
"id": 1,
"name": "iQM",
"urlName": "test"
}
],
"totalRecords": 26,
"filteredRecords": 26
}
}

Step 4.2 Create PG Deal

POST /api/v3/inv/pg/deals/add

Once an exchange is selected, use the exchangeId from the response to create a PG deal.

Properties
dealId
string
PG Deal ID
dealName
string
PG Deal name
exchangeId
integer
Exchange ID associated with PG Deal
cpm
integer
Cost Per Mille (CPM) value
statusId
integer
Status ID of PG Deal
Active: 1>
Inactive: 2
description
string
Description or notes about the deal
paymentTypeId
integer
Payment type ID of PG Deal
Request Sample
{
"dealId": "YT-Test-1234",
"dealName": "Test deal YT31",
"exchangeId": 11,
"statusId": 2,
"paymentTypeId": 1,
"description": "Test Deal"
}
Response 200
{
"success": true,
"data": {
"message": "Deal Test deal YT31 created successfully",
"id": 2
}
}

Step 5: Create a Campaign

Step 5.1 Create Campaign

POST /api/v3/cmp/pg/campaigns/add

Once a Creative is approved, an Insertion Order is created, and a PG deal is created, a Campaign can be created. Use the following schema to define the desired targeting parameters of the new Campaign. Use the creativeTypeId identified in step 2.1, the creativeId from the response in step 2.3, and the ioId from step 3, and the pgDealId returned (id) in step 4.2 to create the campaign.

info

Make sure that budgetTypeId of Campaign matches ioBudgetTypeId from step 3.

For further information see the complete Campaign Creation API Documentation.

Headers
Authentication
string required
Authentication bearer token
See Authentication Guide
X-IAA-OW-ID
integer required
Organization Worskpace ID Header
Request Schema
pgCampaignInfo
object
Object containing Campaign information
pgCampaignInfo object properties
campaignName
string
Name of Campaign
ioId
integer
Insertion Order ID
timeZoneId
integer
Timezone ID, see Master API
totalImpressions
integer optional
Targeted impressions for impression-based Campaign as budget, use if not a dollars-based Campaign
budgetTotal
integer optional
Total budget of the Campaign for dollars-based Campaign, use if not an impressions-based Campaign
maxBid
integer
Maximum allowed bid price for Campaign
startTime
integer
Unix epoch start time of Campaign, in milliseconds
endTime
integer
Unix epoch end time of Campaign, in milliseconds
budgetTypeId
integer
Budget Type ID of given Campaign (impression-based or dollar-based)
campaignTypeId
integer
Campaign Type ID
advertiserDomain
string
Domain of the advertiser user
creativeTargeting
object
Object containing Creative targeting details
creativeTargeting object properties
creativeTypeId
integer
Creative type ID, see Master API
creativeIds
array of integers
IDs of Creatives attached to this Campaign
inventoryTargeting
object
Object containing Inventory targeting details
inventoryTargeting object properties
pgDealIds
array of integers
PG Deal IDs attached to this Campaign
conversionTargeting
object
Object containing Campaign Conversion targeting details
conversionTargeting object properties
conversionTypeId
integer
Conversion type ID attached to this Campaign
conversionIds
array of integers
IDs of Conversions attached to this Campaign
politicalAdvertiserClientId
integer
Advertiser client ID if user is political advertiser
countryId
integer
ID of targeted country
Request Sample
{
"pgCampaignInfo": {
"campaignName": "test imps PG campaign",
"ioId": 95179,
"timeZoneId": 29,
"totalImpressions": 12345,
"maxBid": 8,
"startTime": 1715662337,
"endTime": 1717128000,
"budgetTypeId": 2,
"campaignTypeId": 2,
"advertiserDomain": "https://www.xyz.com"
},
"creativeTargeting": {
"creativeTypeId": 11,
"creativeIds": [
644506
]
},
"inventoryTargeting": {
"pgDealIds": [
30,
12
]
},
"conversionTargeting": {
"conversionTypeId": 1,
"conversionIds": [
465,
687,
987
]
},
"politicalAdvertiserClientId": 989898,
"countryId": 23
}
Response 200
{
"success": true,
"data": {
"message": "PG Campaign Created successfully",
"campaignId": 2
}
}
More Response Samples
Response 422
{
"success": false,
"errorObjects": [
{
"error": "Invalid campaign Type provided"
}
]
}

Step 5.2: Check Campaign Status

GET /api/v2/cmp/campaign/{campaignId}

To run a Campaign, it must be approved. Use the campaignId returned from the last step to check the created Campaign's status.

For further information see the complete Campaign Details API Documentation.

Path Parameter
campaign_id
string required
Campaign ID
Headers
Authentication
string required
Authentication Bearer Token
See Authentication Guide
X-IAA-OW-ID
integer required
Organization Workspace ID Header
Response 200
{
"statusCode": 200,
"responseObject": {
"owId": 1,
"parentOrganizationName": "IQM Corporation",
"id": 25859,
"uowId": 9216,
"campaignName": "Test Campaign",
"advertiserDomain": "https://iqm.com",
"creativeType": 11,
"campaignType": 1,
"totalBudgetPacing": false,
"isTvAd": false,
"budgetDay": 10.0,
"budgetTotal": 100.0,
"maxBid": 10.0,
"timezone": 433,
"startTime": 1703794800,
"endTime": 1704614400,
"status": "pending",
"dspMargin": 0,
"platformMargin": 0,
"userDealMargin": 0,
"spentScale": false,
"creativeIds": "148971",
"conversionType": "None",
"bidOptimization": true,
"bidPacing": true,
"impressionCapping": 0,
"maxDayImpressions": 0,
"maxDayClicks": 0,
"maxDayConversions": 0,
"totalImpressions": 0,
"totalClicks": 0,
"totalConversions": 0,
"deviceType": "13,15,11,12",
"trafficType": "11,12",
"exchanges": "55,61,58,41,39,47,59,1,54,56,45,16,11,37,57,50,46,53,60",
"isLocationWithOrFilter": true,
"countryId": "30100001",
"locationDetails": {},
"isCampaignFromNewPlatform": true,
"organizationName": "IQM Corporation 1",
"userEmail": "domo@iqm.com",
"userName": "Domo Integration",
"conversionTypeId": 0,
"isUnapprovedAudienceTargeted": false,
"isAllAudienceUnapproved": false,
"createDate": 1703794110,
"ioId": 2695,
"ioName": "Sanity test Io",
"prebidAudienceSegmentIdList": [],
"budgetTypeId": 1,
"isAdvanceAudioVideoTargeted": false,
"isEstimatorAvailable": true,
"isEditAccess": true,
"isApprovalAccess": false,
"isMarginSet": true,
"isParentInvoiceTemplateSet": true
}
}