PUT /v3/campaign → campaignUpdate
Overview
| Property |
Value |
| REST endpoint |
PUT /v3/campaign |
| GraphQL operation |
campaignUpdate |
| Input type |
CampaignUpdateInput |
| Output type |
PayloadWithErrorsOfCampaign (data: Campaign, userErrors: [UserError!]!) |
Multi-step operations
| REST-only behavior |
GraphQL target |
Budget, DailyBudget, PacingMode, flight dates |
campaignFlightUpdate, campaignBudgetSettingsUpdate, or campaignPacingSettingsUpdate |
Availability |
Create-only |
FrequencySettings, NewFrequencyConfigs |
Create-only |
AssociatedBidLists, DefaultBidLists |
campaignAssociateBidList |
PartnerCostPercentageFee, PartnerCPMFee, PartnerCPCFee |
Create-only |
CampaignName |
name on CampaignUpdateInput |
CustomLabels (assigned-label objects) |
customLabelNames (replaces full label list) |
Input field mapping
Input type: CampaignUpdateInput
| REST field |
GraphQL field |
GraphQL type |
Required |
Notes |
CampaignId |
id |
String! |
Required |
RequiredOnUpdate |
AdvertiserId |
N/A |
N/A |
Optional |
Create-only |
CampaignName |
name |
String |
Optional |
N/A |
Description |
description |
String |
Optional |
N/A |
PartnerCostPercentageFee |
N/A |
N/A |
Optional |
Create-only |
PartnerCPMFee |
N/A |
N/A |
Optional |
Deprecated on REST |
PartnerCPCFee |
N/A |
N/A |
Optional |
Deprecated on REST |
CampaignConversionReportingColumns |
campaignConversionReportingColumns |
[CampaignConversionReportingColumnInput!] |
Optional |
N/A |
Availability |
N/A |
N/A |
Optional |
Create-only |
FrequencySettings |
N/A |
N/A |
Optional |
Create-only |
PurchaseOrderNumber |
purchaseOrderNumber |
String |
Optional |
N/A |
CtvTargetingAndAttribution |
N/A |
N/A |
Optional |
Create-only |
TimeZone |
timeZone |
String |
Optional |
Windows time zone ID on update |
Budget |
N/A |
N/A |
Optional |
Use flight/budget mutations |
BudgetInImpressions |
N/A |
N/A |
Optional |
Use flight/budget mutations |
ImpressionsOnlyBudgetingCpm |
N/A |
N/A |
Optional |
Create-only |
DailyBudget |
N/A |
N/A |
Optional |
Use flight mutations |
DailyBudgetInImpressions |
N/A |
N/A |
Optional |
Use flight mutations |
StartDate |
N/A |
N/A |
Optional |
Use campaignFlightUpdate |
EndDate |
N/A |
N/A |
Optional |
Use campaignFlightUpdate |
PacingMode |
N/A |
N/A |
Optional |
Use pacing mutations |
AutoAllocatorEnabled |
N/A |
N/A |
Optional |
Deprecated on REST |
AutoPrioritizationEnabled |
N/A |
N/A |
Optional |
Deprecated on REST |
MinimumAdGroupSpendInAdvertiserCurrency |
N/A |
N/A |
Optional |
Deprecated on REST |
CampaignFlights |
N/A |
N/A |
Optional |
InvalidOnUpdate; use campaignFlightUpdate / flight mutations |
IsMediaOceanCampaign |
N/A |
N/A |
Optional |
Create-only |
IsBuildInProgress |
N/A |
N/A |
Optional |
Create-only |
IncludeDefaultsFromAdvertiser |
N/A |
N/A |
Optional |
POST-only / InvalidOnUpdate |
AdditionalFeeCardOnCreate |
N/A |
N/A |
Optional |
Create-only |
CustomLabels |
customLabelNames |
[String!] |
Optional |
Replaces entire label list |
CustomCPAType |
customCPAType |
CustomCPAType |
Optional |
N/A |
CustomCPAType |
customCPATypeInput |
CustomCPATypeInput |
Optional |
GraphQL alternative enum input for the same REST field; supply one of customCPAType or customCPATypeInput |
CustomCPAClickWeight |
customCPAClickWeight |
Decimal |
Optional |
N/A |
CustomCPAViewthroughWeight |
customCPAViewthroughWeight |
Decimal |
Optional |
N/A |
CustomROASType |
customRoasType |
CustomROASType |
Optional |
N/A |
AssociatedBidLists |
N/A |
N/A |
Optional |
Use campaignAssociateBidList |
DefaultBidLists |
N/A |
N/A |
Optional |
Create-only |
CampaignType |
N/A |
N/A |
Optional |
Create-only |
BallotMeasureProfile |
ballotMeasureProfile |
BallotMeasureProfileInput |
Optional |
N/A |
IsBallotMeasure |
isBallotMeasure |
Boolean |
Optional |
N/A |
Increments |
increments |
[String!] |
Optional |
Frequency counter IDs |
NewFrequencyConfigs |
N/A |
N/A |
Optional |
Create-only |
Objective |
N/A |
N/A |
Optional |
Deprecated on REST |
PrimaryGoal |
primaryGoal |
CampaignCreateROIGoalInput |
Optional |
N/A |
SecondaryGoal |
secondaryGoal |
CampaignCreateROIGoalInput |
Optional |
N/A |
TertiaryGoal |
tertiaryGoal |
CampaignCreateROIGoalInput |
Optional |
N/A |
PrimaryChannel |
primaryChannel |
CampaignChannelType |
Optional |
N/A |
RTBAttributes |
N/A |
N/A |
Optional |
Create-only |
EnabledValueAddedProviders |
N/A |
N/A |
Optional |
Deprecated on REST |
EnabledValueAddedProviderIds |
enabledValueAddedProviderIds |
[ID!] |
Optional |
N/A |
Version |
N/A |
N/A |
Optional |
Read-only |
GraphQL-only input fields (no REST equivalent)
| GraphQL field |
GraphQL type |
Description |
adGroupDefaultNielsenSettings |
AdGroupDefaultNielsenSettingsInput |
|
campaignIncrementalReachSetting |
IncrementalReachCampaignSettingInput |
|
ioContractId |
Long |
|
isIPResolutionEnabled |
Boolean |
|
isManagedByTTD |
Boolean |
|
lastTouchAttributionMeasuredByTheTradeDesk |
Boolean |
|
pharmaCampaignBrandProductSettings |
PharmaCampaignBrandProductSettingsInput |
|
tradingModeSettingsInput |
CampaignUpdateTradingModeSettingsInput |
|
userBidFactorsAsMaxBidEnabled |
Boolean |
|
userDataFeatureEnabled |
Boolean |
|
validateInputOnly |
Boolean |
Validate without executing |
Output field mapping
Output type: Campaign (returned as data on PayloadWithErrorsOfCampaign)
| REST response field |
GraphQL field |
GraphQL type |
Nullable |
Notes |
AdvertiserId |
advertiser.id |
String! |
Not nullable |
N/A |
CampaignId |
id |
ID! |
Not nullable |
N/A |
CampaignName |
name |
String! |
Not nullable |
N/A |
Description |
description |
String |
Nullable |
N/A |
PartnerCostPercentageFee |
partnerCostPercentageFee |
Decimal! |
Not nullable |
N/A |
PartnerCPMFee |
N/A |
N/A |
N/A |
Deprecated on REST |
PartnerCPCFee |
N/A |
N/A |
N/A |
Deprecated on REST |
CampaignConversionReportingColumns |
conversionReportingColumns |
ConversionReportingColumnsConnection |
Nullable |
Use nodes { … } |
Availability |
isArchived |
Boolean! |
Not nullable |
REST Available → false; REST Archived → true |
CtvTargetingAndAttribution |
N/A |
N/A |
N/A |
Deprecated on REST |
CreatedAtUTC |
createdAtUtc |
DateTime! |
Not nullable |
N/A |
LastUpdatedAtUTC |
lastUpdatedAtUtc |
DateTime! |
Not nullable |
N/A |
FrequencySettings |
frequencySettings |
FrequencySettings! |
Not nullable |
N/A |
PurchaseOrderNumber |
purchaseOrderNumber |
String |
Nullable |
N/A |
TimeZone |
timeZone |
String! |
Not nullable |
N/A |
Budget |
budget.total |
Decimal! |
Not nullable |
REST Money amount → CampaignBudget.total |
BudgetInImpressions |
budget.totalInImpressions |
Decimal |
Nullable |
Alternative top-level budgetInImpressions also exists on Campaign. |
ImpressionsOnlyBudgetingCpm |
impressionsOnlyBudgetingCPM |
Decimal! |
Not nullable |
N/A |
DailyBudget |
N/A |
N/A |
N/A |
Nested under budget / flights |
DailyBudgetInImpressions |
N/A |
N/A |
N/A |
Not a top-level Campaign field |
StartDate |
startDate |
DateTime! |
Not nullable |
N/A |
EndDate |
endDate |
DateTime |
Nullable |
N/A |
AutoAllocatorEnabled |
autoAllocatorEnabled |
Boolean! |
Not nullable |
N/A |
AutoPrioritizationEnabled |
autoPrioritizationEnabled |
Boolean! |
Not nullable |
N/A |
MinimumAdGroupSpendInAdvertiserCurrency |
minimumAdGroupSpendInAdvertiserCurrency |
Decimal! |
Not nullable |
N/A |
PacingMode |
pacingMode |
CampaignPacingMode! |
Not nullable |
N/A |
CampaignFlights |
flights |
FlightsConnection |
Nullable |
Use nodes { … } |
CustomLabels |
customLabels |
CustomLabelsConnection |
Nullable |
Use nodes { … } |
CustomCPAType |
customCPAType |
CustomCPAType! |
Not nullable |
N/A |
CustomCPAClickWeight |
customCPAClickWeight |
Decimal |
Nullable |
N/A |
CustomCPAViewthroughWeight |
customCPAViewthroughWeight |
Decimal |
Nullable |
N/A |
CustomROASType |
customROASType |
CustomROASType! |
Not nullable |
N/A |
IsBuildInProgress |
isBuildInProgress |
Boolean! |
Not nullable |
Not clearable via campaignUpdate |
IsMediaOceanCampaign |
isMediaOceanCampaign |
Boolean |
Nullable |
N/A |
AssociatedBidLists |
associatedBidLists |
AssociatedBidListsConnection |
Nullable |
Use nodes { … } |
DefaultBidLists |
defaultBidLists |
DefaultBidListsConnection |
Nullable |
BidListId → connection nodes[].id. |
CurrentAndFutureAdditionalFeeCards |
passThroughFeeCards |
PassThroughFeeCardsConnection |
Nullable |
Use nodes { … } |
CampaignType |
type |
CampaignType |
Nullable |
N/A |
BallotMeasureProfile |
N/A |
N/A |
N/A |
Write-only |
IsBallotMeasure |
isBallotMeasure |
Boolean |
Nullable |
N/A |
Increments |
increments |
[Increment] |
Nullable |
N/A |
NewFrequencyConfigs |
frequencyConfigs |
[FrequencyConfig!]! |
Not nullable |
Populated on update response when NewFrequencyConfigs were provided in the request; GetAPIModel leaves the field default on GET. |
Objective |
objective |
CampaignObjective! |
Not nullable |
N/A |
PrimaryGoal |
primaryGoal |
Goal! |
Not nullable |
N/A |
SecondaryGoal |
secondaryGoal |
Goal! |
Not nullable |
N/A |
TertiaryGoal |
tertiaryGoal |
Goal! |
Not nullable |
N/A |
PrimaryChannel |
channelType |
CampaignChannelType! |
Not nullable |
N/A |
RTBAttributes |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
RTBAttributes.AudienceTargeting |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
RTBAttributes.AudienceTargeting.TargetDemographicSettings |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
EnabledValueAddedProviders |
enabledValueAddedProviders |
[ValueAddedProviderInfo!]! |
Not nullable |
N/A |
EnabledValueAddedProviderIds |
enabledValueAddedProviders[].id |
ID! |
Not nullable |
N/A |
Version |
version |
CampaignVersion |
Nullable |
N/A |
TradingModeDetails |
tradingModeDetails |
CampaignTradingModeDetails! |
Not nullable |
N/A |
Endpoint-specific nested types and enums
CampaignConversionReportingColumnInput
Nested under campaignConversionReportingColumns.
| GraphQL field |
GraphQL type |
Required |
Notes |
trackingTagId |
String! |
Required |
REST TrackingTagId |
reportingColumnId |
Int! |
Required |
REST ReportingColumnId |
includeInCustomCPA |
Boolean! |
Required |
REST IncludeInCustomCPA |
weight |
Decimal |
Optional |
REST Weight |
crossDeviceAttributionModelId |
String |
Optional |
N/A |
customROASConfig |
CustomROASConfigInput |
Optional |
Nested custom ROAS settings |
productListReportingType |
ProductListReportingTypeInput |
Optional |
N/A |
CustomROASConfigInput
Nested under CampaignConversionReportingColumnInput.customROASConfig.
| GraphQL field |
GraphQL type |
Required |
Notes |
includeInCustomROAS |
Boolean! |
Required |
N/A |
customROASWeight |
Decimal |
Optional |
N/A |
customROASClickWeight |
Decimal |
Optional |
N/A |
customROASViewthroughWeight |
Decimal |
Optional |
N/A |
CampaignCreateROIGoalInput
Nested under primaryGoal, secondaryGoal, tertiaryGoal. Set exactly one goal metric field.
| GraphQL field |
GraphQL type |
Required |
Notes |
maximizeReach |
Boolean |
Optional |
Reach goal; exactly one goal metric field per goal object (mutually exclusive) |
maximizeLtvIncrementalReach |
Boolean |
Optional |
Incremental reach goal; exactly one goal metric field per goal object (mutually exclusive) |
cpaInAdvertiserCurrency |
Decimal |
Optional |
CPA goal; exactly one goal metric field per goal object (mutually exclusive) |
cpcInAdvertiserCurrency |
Decimal |
Optional |
CPC goal; exactly one goal metric field per goal object (mutually exclusive) |
returnOnAdSpendPercent |
Decimal |
Optional |
ROAS goal; exactly one goal metric field per goal object (mutually exclusive) |
viewabilityInPercent |
Decimal |
Optional |
Viewability goal; exactly one goal metric field per goal object (mutually exclusive) |
vcrInPercent |
Decimal |
Optional |
Video completion rate goal; exactly one goal metric field per goal object (mutually exclusive) |
ctrInPercent |
Decimal |
Optional |
CTR goal; exactly one goal metric field per goal object (mutually exclusive) |
BallotMeasureProfileInput
Nested under ballotMeasureProfile.
| GraphQL field |
GraphQL type |
Required |
Notes |
audienceDescription |
String |
Optional |
N/A |
electionState |
UsStateInput |
Optional |
N/A |
fileLocationInS3 |
String |
Optional |
Required for some states |
geoDescription |
String |
Optional |
N/A |
isAdvertiserIEC |
Boolean |
Optional |
N/A |
payingEntityAddress |
String |
Optional |
N/A |
payingEntityExecutiveName |
String |
Optional |
N/A |
payingEntityExecutiveTitle |
String |
Optional |
N/A |
payingEntityName |
String |
Optional |
N/A |
politicalDataId |
ID |
Optional |
N/A |
CampaignBudget
Nested under budget on the response Campaign.
| GraphQL field |
GraphQL type |
Nullable |
Notes |
total |
Decimal! |
Not nullable |
REST Budget amount |
totalInImpressions |
Decimal |
Nullable |
REST impressions budget cap |
version |
CampaignBudgetingVersion! |
Not nullable |
REST BudgetingVersion |
adGroupSpendPrioritizationType |
AdGroupSpendPrioritizationType! |
Not nullable |
N/A |
allocationMode |
CampaignBudgetAllocationMode! |
Not nullable |
N/A |
currentOrUpComing |
Decimal! |
Not nullable |
Current or next upcoming flight budget |
outcomeGoalType |
OutcomeGoalType |
Nullable |
N/A |
pacingMode |
CampaignPacingMode! |
Not nullable |
N/A |
spendMode |
CampaignBudgetSpendMode |
Nullable |
N/A |
spendStrategy |
KoaSpendStrategy |
Nullable |
N/A |
totalInOutcomes |
Long |
Nullable |
N/A |
usesImpressionBudgets |
Boolean! |
Not nullable |
N/A |
usesMaximumAllocationType |
Boolean! |
Not nullable |
N/A |
Increment
Elements of increments on the response Campaign (input increments accepts counter IDs as [String!]).
| GraphQL field |
GraphQL type |
Nullable |
Notes |
creationDateUtc |
DateTime! |
Not nullable |
N/A |
frequencyCounter |
FrequencyCounter |
Nullable |
Use frequencyCounter { id name } for counter ID |
BallotMeasureProfile
| REST field |
GraphQL field |
GraphQL type |
Nullable |
Notes |
PoliticalDataId |
N/A |
N/A |
N/A |
Write-only |
ElectionState |
N/A |
N/A |
N/A |
Write-only |
PayingEntityName |
N/A |
N/A |
N/A |
Write-only |
PayingEntityAddress |
N/A |
N/A |
N/A |
Write-only |
PayingEntityExecutiveName |
N/A |
N/A |
N/A |
Write-only |
PayingEntityExecutiveTitle |
N/A |
N/A |
N/A |
Write-only |
GeoDescription |
N/A |
N/A |
N/A |
Write-only |
AudienceDescription |
N/A |
N/A |
N/A |
Write-only |
IsAdvertiserIEC |
N/A |
N/A |
N/A |
Write-only |
FileLocationInS3 |
N/A |
N/A |
N/A |
Write-only |
TargetDemographicSettings
| REST field |
GraphQL field |
GraphQL type |
Nullable |
Notes |
AudienceTargeting |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
TargetDemographicSettings |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
TargetDemographicSettings.DataRateType |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
TargetDemographicSettings.CountryCode |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
TargetDemographicSettings.Gender |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
TargetDemographicSettings.StartAge |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
TargetDemographicSettings.EndAge |
N/A |
N/A |
N/A |
Not currently available in GraphQL |
Code examples
REST example
PUT /v3/campaign HTTP/1.1
Content-Type: application/json
TTD-Auth: AUTH_TOKEN_PLACEHOLDER
{
"CampaignId": "camp123",
"CampaignName": "Updated Campaign Name",
"Description": "Updated description"
}
GraphQL example
POST /graphql HTTP/1.1
Content-Type: application/json
TTD-Auth: AUTH_TOKEN_PLACEHOLDER
mutation UpdateCampaign($input: CampaignUpdateInput!) {
campaignUpdate(input: $input) {
data {
id
name
description
lastUpdatedAtUtc
}
userErrors {
message
field
}
}
}
Variables:
{
"input": {
"id": "camp123",
"name": "Updated Campaign Name",
"description": "Updated description"
}
}
Budget, pacing, flights, availability, and associated bid lists from the REST body require separate GraphQL mutations not covered by campaignUpdate.