Update Tactic
Once a tactic has been created, you can update it using the PATCH endpoint. Only the fields included in the request body will be updated. Top-level sections that are omitted from the request will remain unchanged.
Endpoint
PATCH
https://lifeapi.pulsepoint.com/RestApi/v2/account/{accountId}/tactic/{tacticId}
Path Parameters
| Name | Data Type | Required | Notes |
|---|---|---|---|
| accountId | integer | yes | The account ID the tactic belongs to |
| tacticId | integer | yes | The unique identifier of the tactic to update |
How Partial Updates Work
- Only the fields provided in the request body will be updated
- Top-level sections sent in the request completely replace that section
- Top-level sections omitted from the request remain unchanged
- This allows efficient updates without resending the entire tactic configuration
Request Field List
tactic
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| name | string | no | ||
| description | string | no | ||
| enabled | boolean | no | Whether the tactic is enabled or disabled | |
| baseBidPrice | number | no | The base bid price for the tactic. Must be less than or equal to Max Bid Price. | |
| maxBidPrice | number | no | The maximum bid price for the tactic. Must be greater than or equal to Base Bid Price. | |
| customFieldSettings | object | conditional | Mandatory if your account has mandatory custom field settings at the tactic level | |
| budgetDistribution | object | no | How you want to allocate spend across tactics | |
| maxSpendPerTactic | object | no | An optional setting allowing the user to define an amount the tactic cannot spend more than over a given period of time | |
| managementFee | object | no | An override option if you only want to apply a management fee to some tactics and not others | |
| mediaOptimization | object | no | ||
| frequencyCap | object | no | An override option if you want to have a different frequency cap at the tactic level | |
| creativeAssignments | array of objects | no | While this object is not required, a tactic will not serve without at least one creative assigned | |
| targeting | object | no | Narrowing the scope of your ad impressions to certain audience, contextual, or supply filters |
tactic.customFieldSettings
| Name | Data Type | Required | Notes |
|---|---|---|---|
| isNewField | boolean | yes | Values: true, false |
| fieldName | string | yes | Must be unique to the account ID if isNewField = true |
| fieldValue | string | yes |
tactic.budgetDistribution
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| type | ENUM string | yes | Valid Values: Dollars, Percent, Priority. Must match what was set at the line item level | |
| value | number | yes | The allocation for this tactic within the line item flight. For Dollars: amount to spend. For Percentage: share of budget (0–100). For Priority: which tactic receives the next impression |
tactic.maxSpendPerTactic
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| enabled | boolean | yes | ||
| amount | numeric | yes | ||
| period | ENUM string | no | day | Valid Values: day, flight |
tactic.managementFee
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| type | ENUM string | conditional | Required if managementFee object is used. Valid Values: Percentage, CPM, PercentageAndCPM, FixedCPM | |
| percentage | integer | conditional | Required for management fee types of Percentage or PercentageAndCPM | |
| cpm | numeric | conditional | Required for management fee types of CPM, PercentageAndCPM, FixedCPM |
tactic.mediaOptimization
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| type | ENUM string | no | CPM | Valid Values: CPM, FLAT, CPC, CTR, CPA, Tactic_Reach, LineItem_Reach, Campaign_Reach, Viewability |
| goal | numeric | conditional | Required for Viewability, CTR, and CPA optimization types | |
| conversionPixelId | integer | conditional | Required for CPA optimization type |
tactic.frequencyCap
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| applyFrequencyCap | boolean | conditional | Required if frequencyCap object is used | |
| times | integer | yes | Valid values: 1–100 | |
| period | ENUM string | yes | Valid Values: day, hour(s), week, month | |
| hoursValue | integer | conditional | Required only if period is hour(s). Valid Values: 1 to 1000 | |
| crossDevice | ENUM string | no | Valid Values: Per Device, Per Person, Per Household | |
| untrackable | boolean | no | Include untrackable users | |
| ipUntrackable | boolean | no | Include IP-untrackable users |
tactic.creativeAssignments
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| creativeId | integer | yes | The ID of the creative to be assigned to the tactic | |
| weight | integer | yes | Weight is a percentage. Total weight within ad size on a tactic must equal 100 | |
| startDate | string | no | Example: 2025-12-30 23:59:59 | |
| endDate | string | no | Example: 2025-12-30 23:59:59 |
tactic.targeting.hcpByPractitioner
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| crossDevice | ENUM string | no | device | Valid Values: device, person, home_ip, practice_ip |
| npiReporting | boolean | no | false | |
| segments | object |
tactic.targeting.hcpByPractitioner.segments
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| include | boolean | no | Valid Values: true, false | |
| segmentId | integer | no | ||
| segmentType | ENUM string | no | Valid Values: practitioner, specialty |
tactic.targeting.npiTargeting
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| crossDevice | ENUM string | no | device | Valid Values: device, person, home_ip, practice_ip |
| npiReporting | boolean | no | false | |
| lists | array of objects | conditional | Required if npiNumbers is not provided. Add one or more existing NPI lists | |
| npiNumbers | object | conditional | Required if lists is not provided. Add individual NPIs to target |
tactic.targeting.npiTargeting.lists
| Name | Data Type | Required | Notes |
|---|---|---|---|
| listId | string | yes | |
| include | boolean | yes | Valid Values: true, false |
tactic.targeting.npiTargeting.npiNumbers
| Name | Data Type | Required | Notes |
|---|---|---|---|
| numbers | array of strings | yes | NPI numbers must be 10 digits |
| include | boolean | yes | Valid Values: true, false |
tactic.targeting.retargetingPixels
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| crossDevice | ENUM string | no | device | Valid Values: device, person, home_ip, practice_ip |
| recency | ENUM string | yes | Valid Values: 1, 7, 15, 30, 60, 90, 90plus | |
| pixels | array of objects | List of retargeting pixels you are including or excluding |
tactic.targeting.retargetingPixels.pixels
| Name | Data Type | Required | Notes |
|---|---|---|---|
| pixelId | integer | yes | |
| include | boolean | yes | Valid Values: true, false |
tactic.targeting.behavioralSegments
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| crossDevice | ENUM string | no | device | Valid Values: device, person, household, household_ip |
| segments | array of objects | yes |
tactic.targeting.behavioralSegments.segments
| Name | Data Type | Required | Notes |
|---|---|---|---|
| providerId | integer | yes | |
| segmentId | integer | yes | |
| include | boolean | yes | Valid Values: true, false |
tactic.targeting.healthPopulations
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| crossDevice | ENUM string | no | device | Valid Values: device, person, household, household_ip |
| operator | ENUM string | no | or | Valid Values: or, and — whether a user must appear in every population or just one |
| historicalPeriod | ENUM string | yes | Valid Values: 3, 30, 90plus | |
| segments | array of objects | yes |
tactic.targeting.healthPopulations.segments
| Name | Data Type | Required | Notes |
|---|---|---|---|
| meshCode | string | yes | |
| segmentType | ENUM string | yes | Valid Values: treatment, condition |
| include | boolean | yes | Valid Values: true, false |
tactic.targeting.iabNewCategories
| Name | Data Type | Required | Notes |
|---|---|---|---|
| categoryId | integer | yes | |
| include | boolean | yes | Valid Values: true, false |
tactic.targeting.geoTargets
| Name | Data Type | Required | Notes |
|---|---|---|---|
| type | ENUM string | yes | Valid Values: country, state, city, metro |
| values | array of strings | yes | List of geo target values. For country use ISO (e.g., usa, gbr), for state use ISO (e.g., NY, CA), for city use name (e.g., Los Angeles), for metro use name (e.g., philadelphia). All values in the array must have the same parent |
| include | ENUM string | yes | Valid Values: true, false |
| parent | object |
tactic.targeting.geoTargets.parent
| Name | Data Type | Required | Notes |
|---|---|---|---|
| type | ENUM string | yes | Valid Values: country, state |
| value | string | yes | Parent ID of geoTargets.values |
tactic.targeting.devices
| Name | Data Type | Required | Notes |
|---|---|---|---|
| deviceTypes | array of ENUM strings | yes | Valid Values: desktop, mobile, tablet, connected_tv, connected_device, set_top_box, ooh_device |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.domainsApps
| Name | Data Type | Required | Notes |
|---|---|---|---|
| domainLists | array of objects | no | At least one of the four objects is required |
| domains | array of objects | no | |
| appLists | array of objects | no | |
| apps | array of objects | no |
tactic.targeting.domainsApps.domainLists
| Name | Data Type | Required | Notes |
|---|---|---|---|
| listId | string | yes | |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.domainsApps.domains
| Name | Data Type | Required | Notes |
|---|---|---|---|
| domainName | string | yes | |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.domainsApps.appLists
| Name | Data Type | Required | Notes |
|---|---|---|---|
| listId | string | yes | |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.domainsApps.apps
| Name | Data Type | Required | Notes |
|---|---|---|---|
| appName | string | yes | |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.inventorySources
| Name | Data Type | Required | Notes |
|---|---|---|---|
| exchanges | array of strings | yes | |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.inventoryTypes
| Name | Data Type | Required | Notes |
|---|---|---|---|
| types | array of ENUM strings | yes | Valid Values: app, site |
| include | ENUM string | yes | Valid Values: true, false |
tactic.targeting.viewability
| Name | Data Type | Required | Default | Notes |
|---|---|---|---|---|
| minViewabilityRate | integer | yes | Valid Values: 1 to 80 — the percentage viewable | |
| provider | ENUM string | yes | Valid Values: DV (DoubleVerify) |
Errors
| HTTP Status | Error | Description |
|---|---|---|
| 400 | Validation Error | One or more fields failed validation. See the details array in the response for field-level messages |
| 403 | Forbidden | You do not have permission to edit tactic {tacticId} |
| 404 | Not Found | Tactic with ID {tacticId} does not exist |
| 400 | Budget Conflict | Cannot set budget lower than amount already spent |
Updated about 1 month ago
