Planner API
This page covers the methods and endpoints associated with the Healthcare Professional (HCP) Planner. With the Planner API you can create, retrieve, update, publish, and manage HCP plans.
Read more about the HCP Planner in our Help Center article.
For a step-by-step walkthrough, see the Healthcare Professional (HCP) Planner tutorial.
HCP Planner details
HCP Planner resource properties
Resource properties
id integer | Plan ID. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name string | Plan name; must be unique in the Workspace. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
statusId integer | Status ID, with plannerTypeId set to 2. Set by IQM when the plan is created. On edit and publish, must equal the plan's current status. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
startTime integer | Unix epoch start time in milliseconds; can't be in the past. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
endTime integer | Unix epoch end time in milliseconds; must be at least 30 minutes after startTime. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timezoneId integer | Timezone ID. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
budgetTypeId integer | Budget type ID. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
minBudget number | Minimum plan budget, from the generate campaigns response. Required for Ready plans; Draft plans accept null. Returned as null in plan details. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
budget number | Plan budget; must be between minBudget and maxBudget. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxBudget number | Maximum plan budget. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reach integer | Forecasted reach. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxReach integer | Maximum forecasted reach. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
minImpressions integer | Minimum plan impressions, from the generate campaigns response. Required for Ready plans; Draft plans accept null. Returned as null in plan details. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
impressions integer | Plan impressions; must be between minImpressions and maxImpressions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxImpressions integer | Maximum plan impressions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
frequencyCap integer | Frequency cap, 1 to 99. Applies to every campaign in the plan. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
frequencyCapTypeId integer | Frequency cap type ID. Applies to every campaign in the plan. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
owId integer | Organization Workspace ID. Set by IQM. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt integer | Unix epoch creation time in milliseconds. Set by IQM. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
updatedAt integer | Unix epoch last update time in milliseconds. Set by IQM. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ioId integer | ID of the insertion order (IO) created when the plan is published; 0 until then. Set by IQM. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
npiTypeIds array of integers | NPI type IDs. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceBlocks array of objects | Audience blocks, at most one per audience selection method. IQM sets each block's audience type from its method. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceSelectionMethodId integer | Audience selection method ID. | |||||||||||||||
speciality object | Specialties to target. Required for filter based, upload NPI list, and account based blocks. | |||||||||||||||
| ||||||||||||||||
specialityIds array of integers | Specialty IDs to target. Must be empty when allSpecialitiesSelected is true. |
allSpecialitiesSelected boolean | Set to true to target all specialties, with an empty specialityIds list. |
account object
account object properties
accountIds array of integers | Account IDs to target. Must be empty when allAccountsSelected is true. |
allAccountsSelected boolean | Set to true to target all accounts, with an empty accountIds list. |
accountType object
accountType object properties
accountTypeIds array of integers | Account type IDs to target. Must be empty when allAccountTypesSelected is true. |
allAccountTypesSelected boolean | Set to true to target all account types, with an empty accountTypeIds list. |
healthSystem object
healthSystem object properties
healthSystemIds array of integers | Health system IDs to target. Must be empty when allHealthSystemsSelected is true. |
allHealthSystemsSelected boolean | Set to true to target all health systems, with an empty healthSystemIds list. |
title object
title object properties
titleIds array of integers | Title IDs to target. Must be empty when allTitlesSelected is true. |
allTitlesSelected boolean | Set to true to target all titles, with an empty titleIds list. |
locations object
locations object properties
countryId integer | Country ID; must be 30100001 (United States). |
whiteListedStateIds array of integers | State IDs to target. |
blackListedStateIds array of integers | State IDs to exclude. |
whiteListedCityIds array of integers | City IDs to target. |
blackListedCityIds array of integers | City IDs to exclude. |
whiteListedZipcodes array of strings | ZIP codes to target. |
blackListedZipcodes array of strings | ZIP codes to exclude. Targeted and excluded locations can't overlap. |
dataPartners array of objects
dataPartners object properties
id integer | Data partner ID. Account based blocks support only 7 and 12. |
selected boolean | Set to true to use this data partner. |
priority integer | Order of preference, starting at 1; can't be higher than the number of data partners in the block. |
reach integer | Data partner reach. |
incrementalReach integer | Reach this data partner adds on top of higher-priority data partners; 0 to reach. |
storagePathId integer
storagePath string
storageFileName string
storageFileSize integer
storageFileRows integer
includeAudienceIds array of integers
excludeAudienceIds array of integers
planLevelTargeting object
planLevelTargeting object properties
devices object | Devices to target. | |||||||||||||||||||||||
| ||||||||||||||||||||||||
deviceTypeIds array of integers | Device type IDs to target. Must be empty when allDeviceTypesSelected is true. |
allDeviceTypesSelected boolean | Set to true to target all device types, with an empty deviceTypeIds list. |
channels object
channels object properties
channelTypeIds array of integers | Channel type IDs to target. Must be empty when allChannelTypesSelected is true. |
allChannelTypesSelected boolean | Set to true to target all channels, with an empty channelTypeIds list. |
creativeTypes object
creativeTypes object properties
creativeTypeIds array of integers | Creative type IDs to target. Must be empty when allCreativeTypesSelected is true. |
allCreativeTypesSelected boolean | Set to true to target all creative types, with an empty creativeTypeIds list. |
isTvAutoBuying boolean | Whether TV auto buying is enabled; requires video creatives (14). |
inventory object
inventory object properties
openExchanges object | Open Exchange inventory to target. | |||||||||
| ||||||||||
exchangeIds array of integers | Exchange IDs to target. Must be empty when allExchangesSelected is true. |
allExchangesSelected boolean | Set to true to target all exchanges, with an empty exchangeIds list. |
iabCategoryIds array of integers | IAB category IDs to target. Must be empty when allIabCategoriesSelected is true. |
allIabCategoriesSelected boolean | Set to true to target all IAB categories, with an empty iabCategoryIds list. |
inventoryGroup object
inventoryGroup object properties
inventoryGroupIds array of integers | Inventory group IDs to target. |
allInventoryGroupsSelected boolean | Set to true to target all inventory groups, with an empty inventoryGroupIds list. |
splitStrategy array of objects
splitStrategy object properties
splitDimensionTypeId integer | Split dimension ID. Each dimension can appear once. |
selectedValueIds array of integers | Values to split by. For creative type, must exactly match the plan-level creative types; for other dimensions, must be a subset of the matching targeting. Ignored when generating campaigns. |
campaigns array of objects
campaigns object properties
id integer | Proposed campaign ID. Set by IQM and re-created on each edit and publish. | |||||||||||
campaignId integer | Campaign ID of the campaign created when the plan is published; 0 until then. Set by IQM. | |||||||||||
name string | Campaign name. | |||||||||||
strategy string | Targeting values the campaign is split by. Set by IQM. | |||||||||||
startTime integer | Unix epoch start time in milliseconds. | |||||||||||
endTime integer | Unix epoch end time in milliseconds. | |||||||||||
frequencyCap integer | Frequency cap. Taken from the plan; values sent here are ignored. | |||||||||||
frequencyCapTypeId integer | Frequency cap type ID. Taken from the plan; values sent here are ignored. | |||||||||||
minMediaCpm number | Minimum media cost per mille (CPM). | |||||||||||
mediaCpm number | Media CPM, based on the campaign's creative type; must be between minMediaCpm and maxMediaCpm. | |||||||||||
maxMediaCpm number | Maximum media CPM. | |||||||||||
dataCpm number | Data CPM: the average data cost of the campaign's selected data partners. | |||||||||||
minBudget number | Minimum campaign budget. | |||||||||||
budget number | Campaign budget; must be between minBudget and maxBudget. | |||||||||||
maxBudget number | Maximum campaign budget. | |||||||||||
minReach integer | Minimum campaign reach. | |||||||||||
reach integer | Campaign reach; must be between minReach and maxReach. | |||||||||||
maxReach integer | Maximum campaign reach. | |||||||||||
minImpressions integer | Minimum campaign impressions. | |||||||||||
impressions integer | Campaign impressions; must be between minImpressions and maxImpressions. | |||||||||||
maxImpressions integer | Maximum campaign impressions. | |||||||||||
isAbm boolean | Whether the campaign targets an Account Based Marketing (ABM) audience. | |||||||||||
targeting object | Campaign targeting: the values for this campaign's slice of the split strategy. | |||||||||||
| ||||||||||||
creativeTypeId integer | Creative type ID. One creative type per campaign. |
npiTypeId integer | NPI type ID. One NPI type per campaign. |
dataPartnerIds array of integers | Data partner IDs. |
deviceTypeIds array of integers | Device type IDs. |
audienceTypeIds array of integers | Audience type IDs. |
Targeting consistency rule
The selectedValueIds in each splitStrategy entry must agree with the plan's targeting for that dimension. The creative type split must exactly match the plan-level creative types. The other dimensions must be a subset of the matching targeting.
The rule is checked when you create a plan (ready or draft), edit it, or publish it. Generate campaigns plan doesn't check it: it ignores selectedValueIds and splits by every plan-level value of each listed dimension. Campaign targeting isn't checked against the split strategy, so use the campaigns that generate campaigns returns.
| Dimension | splitDimensionTypeId | selectedValueIds must agree with | Rule | Campaign field |
| Creative type | 1 | creativeTypeIds in planLevelTargeting. | Exact match. | creativeTypeId |
| NPI type | 2 | Top-level npiTypeIds. | Subset. | npiTypeId |
| Data partner | 3 | Data partner IDs across all audience blocks. | Subset. | dataPartnerIds |
| Device type | 4 | deviceTypeIds in planLevelTargeting. | Subset. | deviceTypeIds |
| Audience type | 5 | Audience types of all audience blocks, set by IQM from each block's selection method. | Subset. | audienceTypeIds |
When "select all" is used for creative types or devices, compare against the full list: creative types 11, 13, 14, 15, and 17; devices 20300001 to 20300004. Filter based and upload NPI list blocks have the Matched audience type (1), and account based blocks have the Account Based Marketing (ABM) audience type (9). Existing audience blocks take the types of their audiences.
HCP example request with targeting consistency
Highlighted lines show the same IDs recurring across the plan-level selection, the matching splitStrategy entry, and the campaign's own targeting.
{
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"minBudget": 98.00,
"budget": 8820.00,
"maxBudget": 8820.00,
"reach": 60000,
"maxReach": 60000,
"minImpressions": 4000,
"impressions": 360000,
"maxImpressions": 360000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"npiTypeIds": [3, 4],
"audienceBlocks": [
{
"audienceSelectionMethodId": 1,
"speciality": {
"specialityIds": [],
"allSpecialitiesSelected": true
},
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{ "id": 7, "selected": true, "priority": 1, "reach": 120000, "incrementalReach": 120000 },
{ "id": 8, "selected": true, "priority": 2, "reach": 90000, "incrementalReach": 30000 }
]
}
],
"planLevelTargeting": {
"devices": {
"deviceTypeIds": [20300001, 20300004],
"allDeviceTypesSelected": false
},
"creativeTypes": {
"creativeTypeIds": [11, 14],
"allCreativeTypesSelected": false,
"isTvAutoBuying": false
},
"channels": {
"channelTypeIds": [],
"allChannelTypesSelected": true
},
"inventory": {
"openExchanges": {
"exchangeIds": [],
"allExchangesSelected": true,
"iabCategoryIds": [],
"allIabCategoriesSelected": true
},
"inventoryGroup": null
}
},
"splitStrategy": [
{
"splitDimensionTypeId": 1,
"selectedValueIds": [11, 14]
},
{
"splitDimensionTypeId": 2,
"selectedValueIds": [3, 4]
},
{
"splitDimensionTypeId": 3,
"selectedValueIds": [7, 8]
},
{
"splitDimensionTypeId": 4,
"selectedValueIds": [20300001, 20300004]
},
{
"splitDimensionTypeId": 5,
"selectedValueIds": [1]
}
],
"campaigns": [
{
"name": "Image - Physicians - Healthlink - Mobile",
"startTime": 1793505600000,
"endTime": 1796101199000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"minMediaCpm": 6.00,
"mediaCpm": 6.00,
"maxMediaCpm": 6.00,
"dataCpm": 10.00,
"minBudget": 16.00,
"budget": 336.00,
"maxBudget": 336.00,
"minReach": 10,
"reach": 7000,
"maxReach": 7000,
"minImpressions": 1000,
"impressions": 21000,
"maxImpressions": 21000,
"isAbm": false,
"targeting": {
"creativeTypeId": 11,
"npiTypeId": 3,
"dataPartnerIds": [7],
"deviceTypeIds": [20300001],
"audienceTypeIds": [1]
}
}
]
}
HCP Planner details by ID
GETGet HCP plan details by ID. The response uses the same fields as the request body for Create HCP Planner, plus the fields set by IQM.
| Path parameters | |
|---|---|
planId integer | Plan ID. |
{
"success": true,
"data": {
"id": 4512,
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"owId": 200001,
"createdAt": 1791800000000,
"updatedAt": 1791800000000,
"minBudget": null,
"budget": 8820.00,
"maxBudget": 8820.00,
"reach": 60000,
"maxReach": 60000,
"minImpressions": null,
"impressions": 360000,
"maxImpressions": 360000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"statusId": 6,
"npiTypeIds": [3, 4],
"audienceBlocks": [
{
"audienceSelectionMethodId": 1,
"speciality": {
"specialityIds": [],
"allSpecialitiesSelected": true
},
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{ "id": 7, "selected": true, "priority": 1, "reach": 120000, "incrementalReach": 120000 },
{ "id": 8, "selected": true, "priority": 2, "reach": 90000, "incrementalReach": 30000 }
],
"storagePathId": null,
"storagePath": null,
"storageFileName": null,
"storageFileSize": null,
"storageFileRows": null,
"includeAudienceIds": [],
"excludeAudienceIds": []
}
],
"planLevelTargeting": {
"devices": {
"deviceTypeIds": [20300001, 20300004],
"allDeviceTypesSelected": false
},
"channels": {
"channelTypeIds": [],
"allChannelTypesSelected": true
},
"creativeTypes": {
"creativeTypeIds": [11, 14],
"allCreativeTypesSelected": false,
"isTvAutoBuying": false
},
"inventory": {
"openExchanges": {
"exchangeIds": [],
"allExchangesSelected": true,
"iabCategoryIds": [],
"allIabCategoriesSelected": true
},
"inventoryGroup": {
"inventoryGroupIds": [],
"allInventoryGroupsSelected": false
}
}
},
"splitStrategy": [
{ "splitDimensionTypeId": 1, "selectedValueIds": [11, 14] },
{ "splitDimensionTypeId": 2, "selectedValueIds": [3, 4] }
],
"campaigns": [
{
"id": 90001,
"name": "Image - Physicians",
"startTime": 1793505600000,
"endTime": 1796101199000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"minMediaCpm": 6.00,
"mediaCpm": 6.00,
"maxMediaCpm": 6.00,
"dataCpm": 12.50,
"minBudget": 18.50,
"budget": 2331.00,
"maxBudget": 2331.00,
"minReach": 10,
"reach": 42000,
"maxReach": 42000,
"minImpressions": 1000,
"impressions": 126000,
"maxImpressions": 126000,
"isAbm": false,
"targeting": {
"dataPartnerIds": [7, 8],
"creativeTypeId": 11,
"deviceTypeIds": [20300001, 20300004],
"npiTypeId": 3,
"audienceTypeIds": [1]
},
"campaignId": 0
}
],
"ioId": 0
}
}
More responses
{
"success": false,
"errorObjects": [
{
"error": "Plan with plan id 3104 does not exist"
}
]
}
{
"success": false,
"errorObjects": [
{
"error": "Invalid Plan Id",
"field": "planId"
}
]
}
Get list of HCP Planners
GETGet a list of HCP plans.
A plan id can be used in the HCP Planner details by ID endpoint and to perform various actions in HCP Planner management endpoints.
| Query parameters | |
|---|---|
pageNo integer | Page number of retrieved data, default: 1. |
noOfEntries integer | Number of entries returned per page, default: 50. |
searchField string | Filter results by search field: account name. |
sortBy string | Sorts by ascending (+) or descending (-), default: -id. Supported values: id, name, createdBy, createdOn, startDate, endDate, reach, impressions, budget, duration. |
statusIds string | Comma separated status IDs. |
budgetTypeIds string | Comma separated budget type IDs. |
startDate integer | Epoch time in milliseconds. |
endDate integer | Epoch time in milliseconds. |
Response properties
id integer | Plan ID. |
name string | Plan name. |
statusId integer | Status ID. |
createdOn integer | Unix epoch created on date, in milliseconds. |
createdBy string | Created by user name. |
userAvatarUrl string | URL of the user avatar. |
startDate integer | Unix epoch start date, in milliseconds. |
endDate integer | Unix epoch end date, in milliseconds. |
timezoneId integer | Timezone ID of the plan. |
reach integer | Reach. |
impression integer | Impression. |
budget integer | Budget. |
ioId integer | IO ID; 0 until the plan is published. |
budgetTypeId integer | Budget type ID. |
campaignCount integer | Number of campaigns associated with the plan. |
lastUpdated integer | Unix epoch last updated date, in milliseconds. |
{
"success": true,
"data": {
"data": [
{
"id": 2016,
"name": "test",
"statusId": 3,
"createdOn": 1752836679704,
"createdBy": "Harshita Bhambhani",
"userAvatarUrl": "https://iqm-web-assets-c92d6b6cbde1-stage.s3.amazonaws.com/avatar/HB.png",
"startDate": 1752838419000,
"endDate": 1753934400000,
"timezoneId": 29,
"reach": 206567705,
"impression": 37182186900,
"budget": 334639683,
"ioId": 0,
"budgetTypeId": 1,
"campaignCount": 0,
"lastUpdated": 1752816878383
}
],
"totalRecords": 1,
"filteredRecords": 1
}
}
Get list of accounts
GETGet a list of HCP accounts.
| Query parameters | |
|---|---|
pageNo integer | Page number of retrieved data, default: 1. |
noOfEntries integer | Number of entries returned per page, default: 50. |
searchField string | Filter results by search field: account name. |
sortBy string | Sorts by ascending (+) or descending (-), default: +displayName. Supported values: id, name, createdOn. |
accountTypeIds array of integer | Account type IDs. |
accountIds array of integer | Account IDs. |
Response properties
id integer | Account ID. |
name string | Account name. |
displayName string | Account display name. |
displayOrder integer | Account display order. |
accountTypeId integer | Account type ID. |
reach integer | Account reach. |
{
"success": true,
"data": {
"accountsList": [
{
"id": 1,
"name": "Account 1",
"displayName": "Account 1",
"displayOrder": 1,
"accountTypeId": 1,
"reach": 1000
},
{
"id": 2,
"name": "Account 2",
"displayName": "Account 2",
"displayOrder": 2,
"accountTypeId": 1,
"reach": 1000
}
],
"totalRecords": 2,
"filteredRecords": 2
}
}
Download HCP Planner
POSTDownload the HCP Planner file.
| Request schema | |
|---|---|
planId integer | Plan ID. |
fileTypeId integer | File type ID. |
{
"planId": 123,
"fileTypeId": 1
}
{
"success": true,
"data": {
"downloadUrl": "https://iqm-web-assets-c92d6b6cbde1-stage.s3.amazonaws.com/plan_exports/hcp_planner_20240101120000.xlsx"
}
}
HCP Planner management
Create HCP Planner
POSTPOST
Create an HCP plan from the Generate campaigns plan response. Send the generate campaigns response data unchanged, apart from any budgets and impressions you adjust within their ranges.
/proposal/add saves the plan in Ready (6) status. /proposal/draft saves it in Draft (2) status and skips the budget and campaign checks.
The response id is the plan ID used in later requests.
Response properties
message string | Success message. |
id integer | Plan ID. |
{
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"minBudget": 98.00,
"budget": 8820.00,
"maxBudget": 8820.00,
"reach": 60000,
"maxReach": 60000,
"minImpressions": 4000,
"impressions": 360000,
"maxImpressions": 360000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"npiTypeIds": [3, 4],
"audienceBlocks": [
{
"audienceSelectionMethodId": 1,
"speciality": {
"specialityIds": [],
"allSpecialitiesSelected": true
},
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{ "id": 7, "selected": true, "priority": 1, "reach": 120000, "incrementalReach": 120000 },
{ "id": 8, "selected": true, "priority": 2, "reach": 90000, "incrementalReach": 30000 }
]
}
],
"planLevelTargeting": {
"devices": {
"deviceTypeIds": [20300001, 20300004],
"allDeviceTypesSelected": false
},
"creativeTypes": {
"creativeTypeIds": [11, 14],
"allCreativeTypesSelected": false,
"isTvAutoBuying": false
},
"channels": {
"channelTypeIds": [],
"allChannelTypesSelected": true
},
"inventory": {
"openExchanges": {
"exchangeIds": [],
"allExchangesSelected": true,
"iabCategoryIds": [],
"allIabCategoriesSelected": true
},
"inventoryGroup": null
}
},
"splitStrategy": [
{ "splitDimensionTypeId": 1, "selectedValueIds": [11, 14] },
{ "splitDimensionTypeId": 2, "selectedValueIds": [3, 4] }
],
"campaigns": [
{
"id": null,
"name": "Image - Physicians",
"startTime": 1793505600000,
"endTime": 1796101199000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"minMediaCpm": 6.00,
"mediaCpm": 6.00,
"maxMediaCpm": 6.00,
"dataCpm": 12.50,
"minBudget": 18.50,
"budget": 2331.00,
"maxBudget": 2331.00,
"minReach": 10,
"reach": 42000,
"maxReach": 42000,
"minImpressions": 1000,
"impressions": 126000,
"maxImpressions": 126000,
"isAbm": false,
"targeting": {
"dataPartnerIds": [7, 8],
"creativeTypeId": 11,
"deviceTypeIds": [20300001, 20300004],
"npiTypeId": 3,
"audienceTypeIds": [1]
}
},
...
]
}
{
"success": true,
"data": {
"message": "Q4 Cardiology Awareness generated successfully",
"id": 4512
}
}
More responses
{
"success": false,
"errorObjects": [
{
"error": "Selected creative type IDs and split IDs do not match."
}
]
}
Update HCP Planner
PUTUpdate an HCP plan by ID. Send the full plan; the saved plan is replaced with the request body. Editing doesn't change the plan's status. Plans in Processing (5) or IO Created (7) status can't be edited.
To edit a plan, get it with HCP Planner details by ID, change the fields you need, and send it back. The request schema is the same as Create HCP Planner, except for the fields in the following table.
| Path parameters | |
|---|---|
planId integer | Plan ID. |
| Request schema | |||||||||
|---|---|---|---|---|---|---|---|---|---|
id integer required | Plan ID of the plan to update; must be the same as the planId path parameter. | ||||||||
statusId integer required | The plan's current status ID. Send it back unchanged. | ||||||||
minBudget number | Minimum plan budget, from the generate campaigns response. Required for Ready plans; Draft plans accept null. | ||||||||
minImpressions integer | Minimum plan impressions, from the generate campaigns response. Required for Ready plans; Draft plans accept null. | ||||||||
planLevelTargeting object required | Creative type, device, channel, and inventory targeting for the whole plan. | ||||||||
| |||||||||
inventory object required | Inventory to target. | |||
| ||||
inventoryGroup object | Inventory groups to target. Send null unless you target inventory groups. |
campaigns array of objects required
{
"id": 4512,
"statusId": 6,
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"minBudget": 98.00,
"budget": 8820.00,
"maxBudget": 8820.00,
"minImpressions": 4000,
"impressions": 360000,
"maxImpressions": 360000,
"frequencyCap": 5,
"frequencyCapTypeId": 2,
"npiTypeIds": [3, 4],
"audienceBlocks": [ ... ],
"planLevelTargeting": {
"devices": { ... },
"creativeTypes": { ... },
"channels": { ... },
"inventory": {
"openExchanges": { ... },
"inventoryGroup": null
}
},
"splitStrategy": [ ... ],
"campaigns": [ ... ]
}
{
"success": true,
"data": {
"message": "Q4 Cardiology Awareness updated successfully",
"id": 4512
}
}
More responses
{
"success": false,
"errorObjects": [
{
"error": "Plan with plan id 3104 does not exist"
}
]
}
{
"success": false,
"errorObjects": [
{
"error": "Invalid Plan Id",
"field": "planId"
}
]
}
{
"success": false,
"errorObjects": [
{
"error": "Proposal cannot be edited in its current status."
}
]
}
Delete HCP Planner
DELETEDelete one or more HCP plans by ID.
| Query parameters | |
|---|---|
planIds string | Comma separated plan IDs to delete. |
Response properties
message string | Success message. |
{
"success": true,
"data": {
"message": "Sample deleted successfully"
}
}
Validate Planner name
POSTCheck if an HCP plan name is available for use within the Organization. This endpoint also validates the name's character limit and vertical type.
| Request schema | |
|---|---|
name string | Plan name to validate. |
Response properties
available boolean | Indicates if the plan name is available. |
{
"name": "Q4 Diabetes Awareness Campaign"
}
{
"success": true,
"data": {
"available": false
}
}
Get targeting graphs
POSTThis endpoint calculates distribution statistics for devices, creative types, and channels across the entire plan configuration. The payload accepts multiple audience blocks and plan-level targeting and returns aggregated distribution data for each targeting dimension.
Use this endpoint to visualize how different targeting dimensions are distributed across audience blocks and plan-level targeting in an HCP plan.
| Request schema | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
npiTypeIds array of integers | NPI type IDs. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceBlocks array of objects | Array of audience block objects. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceSelectionMethodId integer | Audience selection method ID. | |||||||||||||||
speciality object | Specialties to target. Required for filter based, upload NPI list, and account based blocks. | |||||||||||||||
| ||||||||||||||||
specialityIds array of integers | Specialty IDs to target. Must be empty when allSpecialitiesSelected is true. |
allSpecialitiesSelected boolean | Set to true to target all specialties, with an empty specialityIds list. |
account object
account object properties
accountIds array of integers | Account IDs to target. Must be empty when allAccountsSelected is true. |
allAccountsSelected boolean | Set to true to target all accounts, with an empty accountIds list. |
accountType object
accountType object properties
accountTypeIds array of integers | Account type IDs to target. Must be empty when allAccountTypesSelected is true. |
allAccountTypesSelected boolean | Set to true to target all account types, with an empty accountTypeIds list. |
healthSystem object
healthSystem object properties
healthSystemIds array of integers | Health system IDs to target. Must be empty when allHealthSystemsSelected is true. |
allHealthSystemsSelected boolean | Set to true to target all health systems, with an empty healthSystemIds list. |
title object
title object properties
titleIds array of integers | Title IDs to target. Must be empty when allTitlesSelected is true. |
allTitlesSelected boolean | Set to true to target all titles, with an empty titleIds list. |
locations object
locations object properties
countryId integer | Country ID; must be 30100001 (United States). |
whiteListedStateIds array of integers | State IDs to target. |
blackListedStateIds array of integers | State IDs to exclude. |
whiteListedCityIds array of integers | City IDs to target. |
blackListedCityIds array of integers | City IDs to exclude. |
whiteListedZipcodes array of strings | ZIP codes to target. |
blackListedZipcodes array of strings | ZIP codes to exclude. Targeted and excluded locations can't overlap. |
dataPartners array of objects
dataPartners object properties
id integer | Data partner ID. Account based blocks support only 7 and 12. |
selected boolean | Set to true to use this data partner. |
priority integer | Order of preference, starting at 1; can't be higher than the number of data partners in the block. |
reach integer | Data partner reach. |
incrementalReach integer | Reach this data partner adds on top of higher-priority data partners; 0 to reach. |
storagePathId integer
storagePath string
storageFileName string
storageFileSize integer
storageFileRows integer
includeAudienceIds array of integers
excludeAudienceIds array of integers
planLevelTargeting object
planLevelTargeting object properties
devices object | Devices to target. | |||||||||||||||||||||||
| ||||||||||||||||||||||||
deviceTypeIds array of integers | Device type IDs to target. Must be empty when allDeviceTypesSelected is true. |
allDeviceTypesSelected boolean | Set to true to target all device types, with an empty deviceTypeIds list. |
channels object
channels object properties
channelTypeIds array of integers | Channel type IDs to target. Must be empty when allChannelTypesSelected is true. |
allChannelTypesSelected boolean | Set to true to target all channels, with an empty channelTypeIds list. |
creativeTypes object
creativeTypes object properties
creativeTypeIds array of integers | Creative type IDs to target. Must be empty when allCreativeTypesSelected is true. |
allCreativeTypesSelected boolean | Set to true to target all creative types, with an empty creativeTypeIds list. |
isTvAutoBuying boolean | Whether TV auto buying is enabled; requires video creatives (14). |
inventory object
inventory object properties
openExchanges object | Open Exchange inventory to target. | |||||||||
| ||||||||||
exchangeIds array of integers | Exchange IDs to target. Must be empty when allExchangesSelected is true. |
allExchangesSelected boolean | Set to true to target all exchanges, with an empty exchangeIds list. |
iabCategoryIds array of integers | IAB category IDs to target. Must be empty when allIabCategoriesSelected is true. |
allIabCategoriesSelected boolean | Set to true to target all IAB categories, with an empty iabCategoryIds list. |
inventoryGroup object
inventoryGroup object properties
inventoryGroupIds array of integers | Inventory group IDs to target. |
allInventoryGroupsSelected boolean | Set to true to target all inventory groups, with an empty inventoryGroupIds list. |
owId integer
Response properties
deviceTypeDistribution object | Device type distribution object. | ||||||||||
| |||||||||||
totalNPIs integer | Total NPIs. | ||||
breakdown array of objects | Breakdown array. | ||||
| |||||
deviceTypeId integer | Device type ID. |
percentage number | Percentage. |
creativeTypeDistribution array of objects
creativeTypeDistribution object properties
creativeTypeId integer | Creative type ID. |
impressions integer | Impressions. |
cpm number | CPM. |
channelTypeDistribution object
channelTypeDistribution object properties
totalNPIs integer | Total NPIs. | ||||
breakdown array of objects | Breakdown array. | ||||
| |||||
channelTypeId integer | Channel type ID. |
percentage number | Percentage. |
{
"npiTypeIds": [3, 4],
"audienceBlocks": [
{
"audienceSelectionMethodId": 1,
"speciality": {
"specialityIds": [406000001, 406000002],
"allSpecialitiesSelected": false
},
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{ "id": 7, "selected": true, "priority": 1 },
{ "id": 8, "selected": true, "priority": 2 }
]
}
],
"planLevelTargeting": {
"devices": {
"deviceTypeIds": [20300001, 20300002],
"allDeviceTypesSelected": false
},
"channels": {
"channelTypeIds": [21100001, 21100003],
"allChannelTypesSelected": false
},
"creativeTypes": {
"creativeTypeIds": [11, 14, 15],
"allCreativeTypesSelected": false
},
"inventory": {
"openExchanges": {
"exchangeIds": [16, 19],
"allExchangesSelected": false,
"iabCategoryIds": [11, 21],
"allIabCategoriesSelected": false
}
}
}
}
{
"success": true,
"data": {
"deviceTypeDistribution": {
"totalNPIs": 2025510,
"breakdown": [
{ "deviceTypeId": 20300001, "percentage": 20 },
{ "deviceTypeId": 20300002, "percentage": 35 },
{ "deviceTypeId": 20300003, "percentage": 15 },
{ "deviceTypeId": 20300004, "percentage": 30 }
]
},
"creativeTypeDistribution": [
{
"creativeTypeId": 11,
"impressions": 1600000,
"cpm": 72.0
},
{
"creativeTypeId": 14,
"impressions": 1200000,
"cpm": 65.0
}
],
"channelTypeDistribution": {
"totalNPIs": 2025510,
"breakdown": [
{ "channelTypeId": 21100001, "percentage": 60 },
{ "channelTypeId": 21100003, "percentage": 40 }
]
}
}
}
Get audience graph
POSTThis endpoint accepts an audience block and NPI types and returns an audience graph for an HCP plan. The audience graph contains granular reach data broken down by NPI types, specialties, and data partner overlap.
Use this endpoint to get an audience composition analysis for a single targeting configuration, which is especially useful for understanding data partner overlap and incremental reach.
| Request schema | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
npiTypeIds array of integers | NPI type IDs. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceBlock object | Audience block object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceSelectionMethodId integer | Audience selection method ID. | |||||||||||||||
speciality object | Specialties to target. Required for filter based, upload NPI list, and account based blocks. | |||||||||||||||
| ||||||||||||||||
specialityIds array of integers | Specialty IDs to target. Must be empty when allSpecialitiesSelected is true. |
allSpecialitiesSelected boolean | Set to true to target all specialties, with an empty specialityIds list. |
account object
account object properties
accountIds array of integers | Account IDs to target. Must be empty when allAccountsSelected is true. |
allAccountsSelected boolean | Set to true to target all accounts, with an empty accountIds list. |
accountType object
accountType object properties
accountTypeIds array of integers | Account type IDs to target. Must be empty when allAccountTypesSelected is true. |
allAccountTypesSelected boolean | Set to true to target all account types, with an empty accountTypeIds list. |
healthSystem object
healthSystem object properties
healthSystemIds array of integers | Health system IDs to target. Must be empty when allHealthSystemsSelected is true. |
allHealthSystemsSelected boolean | Set to true to target all health systems, with an empty healthSystemIds list. |
title object
title object properties
titleIds array of integers | Title IDs to target. Must be empty when allTitlesSelected is true. |
allTitlesSelected boolean | Set to true to target all titles, with an empty titleIds list. |
locations object
locations object properties
countryId integer | Country ID; must be 30100001 (United States). |
whiteListedStateIds array of integers | State IDs to target. |
blackListedStateIds array of integers | State IDs to exclude. |
whiteListedCityIds array of integers | City IDs to target. |
blackListedCityIds array of integers | City IDs to exclude. |
whiteListedZipcodes array of strings | ZIP codes to target. |
blackListedZipcodes array of strings | ZIP codes to exclude. Targeted and excluded locations can't overlap. |
dataPartners array of objects
dataPartners object properties
id integer | Data partner ID. Account based blocks support only 7 and 12. |
selected boolean | Set to true to use this data partner. |
priority integer | Order of preference, starting at 1; can't be higher than the number of data partners in the block. |
reach integer | Data partner reach. |
incrementalReach integer | Reach this data partner adds on top of higher-priority data partners; 0 to reach. |
storagePathId integer
storagePath string
storageFileName string
storageFileSize integer
storageFileRows integer
includeAudienceIds array of integers
excludeAudienceIds array of integers
Response properties
npiTypes array of objects | NPI types array. | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
id integer | ID. |
reach integer | Reach. |
specialties array of objects
specialties object properties
id integer | ID. |
reach integer | Reach. |
accountStats object
accountStats object properties
accountsTypeCount integer | Accounts type count. | ||||
accountsCount integer | Accounts count. | ||||
accounts array of objects | Accounts array. | ||||
| |||||
id integer | ID. |
reach integer | Reach. |
dataPartnerStats object
dataPartnerStats object properties
partners array of objects | Partners array. | ||||||||||
| |||||||||||
id integer | ID. |
reach integer | Reach. |
coverage number | Coverage. |
venn array of objects
venn object properties
partnerIds array of integers | Partner IDs. |
count integer | Count. |
reach integer | Reach. |
coveragePercentage number | Coverage percentage. |
intersectionPercentage number | Intersection percentage. |
{
"npiTypeIds": [3],
"audienceBlock": {
"audienceSelectionMethodId": 4,
"speciality": {
"specialityIds": [],
"allSpecialitiesSelected": true
},
"account": {
"accountIds": [440016, 440023],
"allAccountsSelected": false
},
"accountType": {
"accountTypeIds": [],
"allAccountTypesSelected": true
},
"healthSystem": {
"healthSystemIds": [],
"allHealthSystemsSelected": true
},
"title": {
"titleIds": [],
"allTitlesSelected": true
},
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{ "id": 7, "selected": true, "priority": 1 },
{ "id": 12, "selected": true, "priority": 2 }
]
}
}
{
"success": true,
"data": {
"npiTypes": [
{
"id": 3,
"reach": 2
}
],
"specialties": [
{
"id": 406099999,
"reach": 2
},
{
"id": 406000018,
"reach": 2
},
{
"id": 406000136,
"reach": 1
},
{
"id": 406000106,
"reach": 1
}
],
"accountStats": {
"accountsTypeCount": 1,
"accountsCount": 2,
"accounts": [
{
"id": 440023,
"reach": 1
},
{
"id": 440016,
"reach": 1
}
]
},
"dataPartnerStats": {
"partners": [
{
"id": 7,
"reach": 2,
"coverage": 100
},
{
"id": 8,
"reach": 2,
"coverage": 100
},
{
"id": 10,
"reach": 2,
"coverage": 100
}
],
"venn": [
{
"partnerIds": [
7
],
"count": 0,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
},
{
"partnerIds": [
8
],
"count": 0,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
},
{
"partnerIds": [
10
],
"count": 0,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
},
{
"partnerIds": [
7,
8
],
"count": 0,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
},
{
"partnerIds": [
7,
10
],
"count": 0,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
},
{
"partnerIds": [
8,
10
],
"count": 0,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
},
{
"partnerIds": [
7,
8,
10
],
"count": 2,
"reach": 2,
"coveragePercentage": 100,
"intersectionPercentage": 100
}
]
}
}
}
Get audience summary
POSTThis endpoint retrieves aggregated audience reach and audience count per audience block based on the provided plan configuration. It validates user access and the Healthcare vertical before processing.
Use this endpoint to preview the size and composition of each audience block before generating campaigns.
| Request schema | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
npiTypeIds array of integers | NPI type IDs. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceBlocks array of objects | Array of audience block objects. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
audienceSelectionMethodId integer | Audience selection method ID. | |||||||||||||||
speciality object | Specialties to target. Required for filter based, upload NPI list, and account based blocks. | |||||||||||||||
| ||||||||||||||||
specialityIds array of integers | Specialty IDs to target. Must be empty when allSpecialitiesSelected is true. |
allSpecialitiesSelected boolean | Set to true to target all specialties, with an empty specialityIds list. |
account object
account object properties
accountIds array of integers | Account IDs to target. Must be empty when allAccountsSelected is true. |
allAccountsSelected boolean | Set to true to target all accounts, with an empty accountIds list. |
accountType object
accountType object properties
accountTypeIds array of integers | Account type IDs to target. Must be empty when allAccountTypesSelected is true. |
allAccountTypesSelected boolean | Set to true to target all account types, with an empty accountTypeIds list. |
healthSystem object
healthSystem object properties
healthSystemIds array of integers | Health system IDs to target. Must be empty when allHealthSystemsSelected is true. |
allHealthSystemsSelected boolean | Set to true to target all health systems, with an empty healthSystemIds list. |
title object
title object properties
titleIds array of integers | Title IDs to target. Must be empty when allTitlesSelected is true. |
allTitlesSelected boolean | Set to true to target all titles, with an empty titleIds list. |
locations object
locations object properties
countryId integer | Country ID; must be 30100001 (United States). |
whiteListedStateIds array of integers | State IDs to target. |
blackListedStateIds array of integers | State IDs to exclude. |
whiteListedCityIds array of integers | City IDs to target. |
blackListedCityIds array of integers | City IDs to exclude. |
whiteListedZipcodes array of strings | ZIP codes to target. |
blackListedZipcodes array of strings | ZIP codes to exclude. Targeted and excluded locations can't overlap. |
dataPartners array of objects
dataPartners object properties
id integer | Data partner ID. Account based blocks support only 7 and 12. |
selected boolean | Set to true to use this data partner. |
priority integer | Order of preference, starting at 1; can't be higher than the number of data partners in the block. |
reach integer | Data partner reach. |
incrementalReach integer | Reach this data partner adds on top of higher-priority data partners; 0 to reach. |
storagePathId integer
storagePath string
storageFileName string
storageFileSize integer
storageFileRows integer
includeAudienceIds array of integers
excludeAudienceIds array of integers
planLevelTargeting object
planLevelTargeting object properties
devices object | Devices to target. | |||||||||||||||||||||||
| ||||||||||||||||||||||||
deviceTypeIds array of integers | Device type IDs to target. Must be empty when allDeviceTypesSelected is true. |
allDeviceTypesSelected boolean | Set to true to target all device types, with an empty deviceTypeIds list. |
channels object
channels object properties
channelTypeIds array of integers | Channel type IDs to target. Must be empty when allChannelTypesSelected is true. |
allChannelTypesSelected boolean | Set to true to target all channels, with an empty channelTypeIds list. |
creativeTypes object
creativeTypes object properties
creativeTypeIds array of integers | Creative type IDs to target. Must be empty when allCreativeTypesSelected is true. |
allCreativeTypesSelected boolean | Set to true to target all creative types, with an empty creativeTypeIds list. |
isTvAutoBuying boolean | Whether TV auto buying is enabled; requires video creatives (14). |
inventory object
inventory object properties
openExchanges object | Open Exchange inventory to target. | |||||||||
| ||||||||||
exchangeIds array of integers | Exchange IDs to target. Must be empty when allExchangesSelected is true. |
allExchangesSelected boolean | Set to true to target all exchanges, with an empty exchangeIds list. |
iabCategoryIds array of integers | IAB category IDs to target. Must be empty when allIabCategoriesSelected is true. |
allIabCategoriesSelected boolean | Set to true to target all IAB categories, with an empty iabCategoryIds list. |
inventoryGroup object
inventoryGroup object properties
inventoryGroupIds array of integers | Inventory group IDs to target. |
allInventoryGroupsSelected boolean | Set to true to target all inventory groups, with an empty inventoryGroupIds list. |
Response properties
audienceSummary array of objects | Audience summary array. | ||||||
| |||||||
audienceSelectionMethodId integer | Audience selection method ID. |
reach integer | Audience reach count. |
audienceCount integer | Number of audiences. |
{
"npiTypeIds": [3, 4],
"audienceBlocks": [
{
"audienceSelectionMethodId": 1,
"speciality": {
"specialityIds": [],
"allSpecialitiesSelected": true
},
"account": null,
"accountType": null,
"healthSystem": null,
"title": null,
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{
"id": 12,
"reach": 0,
"incrementalReach": 0,
"priority": 4,
"selected": true
},
{
"id": 7,
"reach": 0,
"incrementalReach": 0,
"priority": 1,
"selected": true
}
],
"storagePathId": null,
"storagePath": null,
"storageFileName": null,
"storageFileSize": null,
"storageFileRows": null,
"includeAudienceIds": [],
"excludeAudienceIds": []
}
],
"planLevelTargeting": {
"devices": {
"deviceTypeIds": [20300002, 20300001],
"allDeviceTypesSelected": false
},
"creativeTypes": {
"creativeTypeIds": [11],
"allCreativeTypesSelected": false,
"isTvAutoBuying": false
},
"channels": {
"channelTypeIds": [21100001, 21100003],
"allChannelTypesSelected": false
},
"inventory": {
"inventoryGroup": {
"inventoryGroupIds": [190634, 190827],
"allInventoryGroupsSelected": false
}
}
}
}
{
"success": true,
"data": {
"audienceSummary": [
{
"audienceSelectionMethodId": 1,
"reach": 485207,
"audienceCount": 2
},
{
"audienceSelectionMethodId": 4,
"reach": 6539272,
"audienceCount": 1
}
]
}
}
Generate campaigns plan
POSTGenerate proposed campaigns from a plan configuration. This is the first step in creating an HCP plan. IQM builds the campaigns from the split strategy, forecasts their reach, and calculates each campaign's CPM, impressions, and budget range, along with the plan's totals. Nothing is saved.
Send the plan without totals or campaigns. The response data is the request body for Create HCP Planner.
Each campaign's dataCpm is the average data cost of its selected data partners, and its mediaCpm depends on its creative type. The selectedValueIds in splitStrategy are ignored: campaigns are created for every plan-level value of each listed dimension.
{
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"npiTypeIds": [3, 4],
"audienceBlocks": [
{
"audienceSelectionMethodId": 1,
"speciality": {
"specialityIds": [],
"allSpecialitiesSelected": true
},
"locations": {
"countryId": 30100001,
"whiteListedStateIds": [],
"blackListedStateIds": [],
"whiteListedCityIds": [],
"blackListedCityIds": [],
"whiteListedZipcodes": [],
"blackListedZipcodes": []
},
"dataPartners": [
{ "id": 7, "selected": true, "priority": 1 },
{ "id": 8, "selected": true, "priority": 2 }
]
}
],
"planLevelTargeting": {
"devices": {
"deviceTypeIds": [20300001, 20300004],
"allDeviceTypesSelected": false
},
"creativeTypes": {
"creativeTypeIds": [11, 14],
"allCreativeTypesSelected": false,
"isTvAutoBuying": false
},
"channels": {
"channelTypeIds": [],
"allChannelTypesSelected": true
},
"inventory": {
"openExchanges": {
"exchangeIds": [],
"allExchangesSelected": true,
"iabCategoryIds": [],
"allIabCategoriesSelected": true
},
"inventoryGroup": null
}
},
"splitStrategy": [
{ "splitDimensionTypeId": 1, "selectedValueIds": [11, 14] },
{ "splitDimensionTypeId": 2, "selectedValueIds": [3, 4] }
]
}
{
"success": true,
"data": {
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"minBudget": 98.00,
"budget": 8820.00,
"maxBudget": 8820.00,
"reach": 60000,
"maxReach": 60000,
"minImpressions": 4000,
"impressions": 360000,
"maxImpressions": 360000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"npiTypeIds": [3, 4],
"audienceBlocks": [ ... ],
"planLevelTargeting": { ... },
"splitStrategy": [ ... ],
"campaigns": [
{
"id": null,
"name": "Video - Physicians",
"startTime": 1793505600000,
"endTime": 1796101199000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"minMediaCpm": 18.00,
"mediaCpm": 18.00,
"maxMediaCpm": 18.00,
"dataCpm": 12.50,
"minBudget": 30.50,
"budget": 3843.00,
"maxBudget": 3843.00,
"minReach": 10,
"reach": 42000,
"maxReach": 42000,
"minImpressions": 1000,
"impressions": 126000,
"maxImpressions": 126000,
"isAbm": false,
"targeting": {
"dataPartnerIds": [7, 8],
"creativeTypeId": 14,
"deviceTypeIds": [20300001, 20300004],
"npiTypeId": 3,
"audienceTypeIds": [1]
}
},
...
]
}
}
Publish campaigns plan
POSTPublish an HCP plan to create an IO and campaigns. Send the full plan with its id and current statusId. Publishing first saves the request body with the same checks as Update HCP Planner, so the same request rules apply. Only Advertiser Organizations can publish plans.
Publishing is asynchronous. The plan moves to Processing (5) while the IO and campaigns are created, then to IO Created (7), with ioId and each campaign's campaignId set. If publishing fails, the plan moves to Failed (4). The response only confirms that publishing has started: use HCP Planner details by ID to check the result.
The campaigns are created as drafts. They don't run until creatives are attached and the campaigns are approved.
| Request schema | |||||||||
|---|---|---|---|---|---|---|---|---|---|
id integer | Plan ID of the plan to publish. Without an id, a new plan is created and published. | ||||||||
statusId integer | The plan's current status ID. Send it back unchanged. | ||||||||
minBudget number | Minimum plan budget, from the generate campaigns response. Required for Ready plans. | ||||||||
minImpressions integer | Minimum plan impressions, from the generate campaigns response. Required for Ready plans. | ||||||||
planLevelTargeting object required | Creative type, device, channel, and inventory targeting for the whole plan. | ||||||||
| |||||||||
inventory object required | Inventory to target. | |||
| ||||
inventoryGroup object | Inventory groups to target. Send null unless you target inventory groups. |
campaigns array of objects required
{
"id": 4512,
"statusId": 6,
"name": "Q4 Cardiology Awareness",
"startTime": 1793505600000,
"endTime": 1796101199000,
"timezoneId": 29,
"budgetTypeId": 1,
"minBudget": 98.00,
"budget": 8820.00,
"maxBudget": 8820.00,
"minImpressions": 4000,
"impressions": 360000,
"maxImpressions": 360000,
"frequencyCap": 3,
"frequencyCapTypeId": 1,
"npiTypeIds": [3, 4],
"audienceBlocks": [ ... ],
"planLevelTargeting": {
"devices": { ... },
"creativeTypes": { ... },
"channels": { ... },
"inventory": {
"openExchanges": { ... },
"inventoryGroup": null
}
},
"splitStrategy": [ ... ],
"campaigns": [ ... ]
}
{
"success": true,
"data": {
"message": "Campaign generation is in progress"
}
}
More responses
{
"success": false,
"errorObjects": [
{
"error": "Proposal cannot be edited in its current status."
}
]
}
More HCP details
Get split strategy list
GETGet the list of available split strategies for HCP plans.
Response properties
id integer | Split strategy ID. |
name string | Split strategy name. |
order integer | Order. |
displayName string | Display name. |
{
"success": true,
"data": [
{
"id": 1,
"name": "creative_type",
"order": 1,
"displayName": "Creative Type"
},
{
"id": 2,
"name": "npi_type",
"order": 2,
"displayName": "NPI Type"
},
{
"id": 3,
"name": "partner",
"order": 3,
"displayName": "Partner"
},
{
"id": 4,
"name": "device_type",
"order": 4,
"displayName": "Device Type"
},
{
"id": 5,
"name": "audience_type",
"order": 5,
"displayName": "Audience Type"
}
]
}
NPI type list
GETGet the list of available NPI types for HCP plans.
Response properties
id integer | NPI type ID. |
name string | NPI type name. |
order integer | Order. |
displayName string | NPI type display name. |
{
"success": true,
"data": [
{
"id": 3,
"name": "hcp",
"order": 3,
"displayName": "HCP"
},
{
"id": 4,
"name": "npi_nurse",
"order": 4,
"displayName": "NPI Nurse"
}
]
}
Get geography segments
GETGet the list of available geography segments for HCP plans.
Response properties
id integer | Geography segment ID. |
name string | Geography segment name. |
order integer | Order. |
displayName string | Display name. |
{
"success": true,
"data": [
{
"id": 302,
"name": null,
"order": 1,
"displayName": "State"
},
{
"id": 304,
"name": null,
"order": 4,
"displayName": "City"
}
]
}
Get data partners list
GETGet the list of available data partners for HCP Planners. Account based audience blocks support only Healthlink (7) and RevOptimal (12).
Response properties
id integer | Data partner ID. |
name string | Data partner name. |
order integer | Order. |
displayName string | Data partner display name. |
dataCost integer | Data cost. |
logoUrl string | Logo URL. |
{
"success": true,
"data": [
{
"id": 7,
"name": "hl_npi_id",
"order": 6,
"displayName": "Healthlink ID",
"dataCost": 10,
"logoUrl": "https://advp0had0vuj7rad3niaw1eus2-stage.s3.us-east-1.amazonaws.com/data_partner/hld.png"
},
{
"id": 8,
"name": "data360_npi_id",
"order": 7,
"displayName": "Data360 ID",
"dataCost": 15,
"logoUrl": "https://advp0had0vuj7rad3niaw1eus2-stage.s3.us-east-1.amazonaws.com/data_partner/D360.png"
},
{
"id": 11,
"name": "pl_npi_id",
"order": 10,
"displayName": "Purple Lab ID",
"dataCost": 15,
"logoUrl": "https://advp0had0vuj7rad3niaw1eus2-stage.s3.us-east-1.amazonaws.com/data_partner/pl.png"
},
{
"id": 12,
"name": "ro_npi_id",
"order": 11,
"displayName": "RevOptimal ID",
"dataCost": 8,
"logoUrl": "https://advp0had0vuj7rad3niaw1eus2-stage.s3.us-east-1.amazonaws.com/data_partner/ro.png"
}
]
}
Get audience selection methods list
GETGet the list of available audience selection methods for HCP plans.
Response properties
id integer | Audience selection method ID. |
name string | Audience selection method name. |
order integer | Order. |
displayName string | Audience selection method display name. |
{
"success": true,
"data": [
{
"id": 1,
"name": "filter_based",
"order": 1,
"displayName": "Filter Based"
},
{
"id": 2,
"name": "npi_upload",
"order": 2,
"displayName": "Upload NPI List"
},
{
"id": 3,
"name": "existing_audience",
"order": 3,
"displayName": "Existing Audience"
},
{
"id": 4,
"name": "abm_block",
"order": 4,
"displayName": "Account Based"
}
]
}
Get specialties list
GETGet the list of available specialties for HCP plans.
| Query parameters | |
|---|---|
pageNo integer | Page number of retrieved data, default: 1. |
noOfEntries integer | Number of entries returned per page, default: 50. |
searchField string | Filter results by search field. |
sortBy string | Sorts by ascending (+) or descending (-), default: +displayName. Supported values: name, id, createdOn. |
specialityIds array of integers | Filter by specialty IDs. |
{
"success": true,
"data": {
"specialitiesList": [
{
"id": 40500003,
"name": "Addiction Medicine",
"displayName": "Addiction Medicine",
"displayOrder": 3
},
{
"id": 40500004,
"name": "Addiction Medicine",
"displayName": "Addiction Medicine",
"displayOrder": 3
}
],
"totalRecords": 2,
"filteredRecords": 2
}
}
Get account types
GETGet the list of available account types for HCP plans.
| Query parameters | |
|---|---|
pageNo integer | Page number of retrieved data, default: 1. |
noOfEntries integer | Number of entries returned per page, default: 50. |
searchField string | Filter results by search field. |
sortBy string | Sorts by ascending (+) or descending (-), default: -reach. Supported values: name, id, createdOn. |
Response properties
id integer | Account type ID. |
name string | Account type name. |
displayName string | Account type display name. |
displayOrder integer | Display order. |
accountCount integer | Account count. |
{
"success": true,
"data": {
"accountTypesList": [
{
"id": 1,
"name": "Individual",
"displayName": "Individual",
"displayOrder": 1,
"accountCount": 1
},
{
"id": 2,
"name": "Organization",
"displayName": "Organization",
"displayOrder": 2,
"accountCount": 1
}
],
"totalRecords": 2,
"filteredRecords": 2
}
}