Update Existing Campaigns

📘

URL: PUT /api/v1/campaigns

Note:

  • This API supports batch operations with a max batch size of 10. For bulk operation, the advertiserId must be the same across all requests in the payload.
  • PUT API requests will overwrite all current values and are not intended to be used as incremental updates like PATCH operations
  • You must set all of budgetType, dailyBudget, totalBudget, startDate, endDate, and deliverySpeed parameters at same level, i.e. either at campaign level or ad group level. Attempting to alter the "level" at which they are set via a PUT request will result in a validation error.
  • mediaType field cannot be modified after creating a campaign. mediaType is ignored when included in the request payload.
  • For details on updatable fields, refer to this link

Request Parameters

ParametersNotesTypeRequiredPossible Values
campaignIdID of the campaignintegerYValid campaign ID
advertiserIdID of advertiserintegerYValid advertiser ID
nameThe name of the campaign
Note: Limit on length of campaign name is 240 characters
stringYThe campaign name should be unique
descriptionCampaign description
Note: Limit on length of campaign description is 240 characters
stringNProvide valid description corresponding to campaign type
objective

Specifies the campaign objective.

Note: You can update objective only if the campaign has never gone live

stringN

Values:
• awareness
• engagement
• conversion
• default
Note: Use "default" only for updating older campaigns created before the objective feature was introduced. These campaigns will display "default" as their objective in the campaign list API. Using "default" for other campaigns will overwrite their objectives with "default"

If the objective is not specified in the request payload, the existing value of the objective will be retained.

campaignTypeThe type of the campaign
Note:
  • You can not update campaignType

  • Only value supported currently is 'ngd'

stringNValues of campaignType: ngd
startDateThe date to start campaign
Note:
  • it must be set either at campaign or ad group level.
  • You can update startDate only for campaigns in DRAFT and SCHEDULED state
dateConditional. This field is required only if it is not set at ad group level. Cannot be changed to ad group level later

Date should be in format: yyyy-MM-dd'T'HH:mm:ss.SSSXXX

Note:

  • All timestamp values must be in ISO 8601 format (e.g., "2025-07-20T19:10:10-05:00").
  • All date-time values are internally converted to Eastern Time (ET) for processing and normalized to the start of the hour. This means minutes and seconds are truncated. Example: "2025-07-20T19:10:10-05:00" becomes "2025-07-20T19:00:00-05:00" in ET

Kindly take these behaviors into consideration when assigning a value to startDate in your request.

endDateThe date when campaign ends
Note: it must be set either at campaign or ad group level
dateConditional. This field is required only if it is not set at ad group level. Cannot be changed to ad group level later

Date should be in format: yyyy-MM-dd'T'HH:mm:ss.SSSXXX

To run campaign indefinitely, set its value as ‘9999-12-30T00:00:00Z’

Note:

  • All timestamp values must be in ISO 8601 format (e.g., "2025-07-20T19:10:10-05:00").
  • All date-time values are internally converted to Eastern Time (ET) for processing and normalized to the start of the hour. This means minutes and seconds are truncated. Example: "2025-07-20T19:10:10-05:00" becomes "2025-07-20T19:00:00-05:00" in ET
  • The endDate must be set to a time after 12:00 PM ET. If the provided value is before 12:00 PM ET, the system will return an error.
  • Special Case: If you set endDate to exactly "00:00:00" ET (e.g., "2025-07-20T00:00:00-05:00"), it will be interpreted as the end of the previous day: "2025-07-19T23:59:59-05:00".

Kindly take these behaviors into consideration when assigning a value to startDate in your request.

budgetType

The type of budget allocation you want to choose for your campaign

Note:
  • it must be set either at campaign or ad group level
  • You can not update budgetType
    Campaigns scheduled to run indefinitely must use a daily budget
stringConditional. This field is required only if it is not set at ad group level. Cannot be changed to ad group level laterValues:
  • daily
  • total
dailyBudgetDaily budget of campaign
Note:
  • Daily budget cannot exceed your total budget amount
  • Up to 20% of the unspent budget will be rolled over to the next day
  • it must be set either at campaign or ad group level
    -Campaigns scheduled to run indefinitely must use a daily budget
doubleConditional. This field is required only if:
  • It is not
    set at ad group level. Cannot be changed to ad group level later

  • budgetType is set to be daily

The value of daily budget should at least be $0.01
Note: This field is required only if budgetType is set to be dailyBudget
totalBudgetTotal budget of campaign
Note: it must be set either at campaign or ad group level
double

Conditional. This field is required only if:
It is not set at ad group level. Cannot be changed to ad group level later

budgetType is set to be total

The value of total budget should at least be $0.01
Note: This field is required only if budgetType is set to be totalBudget
deliverySpeedDetermines pacing of ad delivery
Note:
  • it must be set either at campaign or ad group level
  • You can update it only for campaigns in DRAFT state
stringConditional. This field is required only if it is not set at ad group level. Cannot be changed to ad group level laterValues:
  • frontloaded
  • evenly
    Note: frontloaded pacing is not supported if budgetType is daily
  • You must set all of budgetType, dailyBudget, totalBudget, startDate, endDate, and deliverySpeed parameters at same level i.e. either at campaign level or ad group level, not both
  • You cannot change the level at which budgetType, dailyBudget, totalBudget, startDate, endDate, and deliverySpeed are set i.e. if these are set at campaign level while creating the campaign, it cannot be changed to ad group later and vice versa.
  • You can only set either dailyBudget or totalBudget
  • To set daily budget, you must choose value of budgetType as “daily” and then define dailyBudget.
  • To set total budget, you must choose value of budgetType as “total” and then define totalBudget.
  • mediaType field cannot be modified after a campaign is created. mediaType, if included in the request payload, is ignored and will not be modified.
  • Campaigns created to run definitely can be updated later to include an end date

Headers

Header NameDescriptionRequiredValues
AuthorizationThe token will provide you the access to the API. It is same for all advertisers you access through the API.YPlease utilize the generated auth_token shared with you at the time of partner onboarding from the Getting Started Guide
Content-TypeFormat of the message bodyYapplication/json
WM_CONSUMER.IDUnique ID for consumer. We will provide you the consumer ID to access the API. It is same for all advertisers you access through the API.   YPlease use the generated ConsumerId shared with you at the time of partner onboarding. Refer to the Getting Started Guide for more information
WM_SEC.AUTH_SIGNATUREAuth signature as an API key.YUse the signature generator code from Getting Started Guide to generate this value
WM_SEC.KEY_VERSIONKey version. We will provide you with the KEY VERSION to access the API. It is same for all advertisers you access through the API.Y1
WM_CONSUMER.intimestampTimestamp for which the auth signature is generated. Use Unix epoch format for the timestamp.YUse the signature generator code from Getting Started Guide to generate this value


Sample Request

curl -X PUT \ 'https://developer.api.us.stg.walmart.com/api-proxy/service/display/api/v1/api/v1/campaigns' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <auth_token>' \ --header 'WM_SEC.AUTH_SIGNATURE: **************' \ --header 'WM_SEC.KEY_VERSION: 1' \ --header 'WM_CONSUMER.ID: adfwe-v23-faasd2r-afs-asdfqeff' \ --header 'WM_CONSUMER.INTIMESTAMP: 1565309779' \ --data '[ { "campaignId": 1, "advertiserId": 1, "name": "string", "description": "string", "objective": "awareness", "campaignType": "ngd", "startDate": "2023-12-05T12:00:00Z", "endDate": "2023-12-25T12:00:00Z", "budgetType": "daily", "dailyBudget": 1.0, "deliverySpeed": "evenly" } ]'

Sample Request (Batch Operation)

curl -X PUT \ 'https://developer.api.us.stg.walmart.com/api-proxy/service/display/api/v1/api/v1/campaigns' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <auth_token>' \ --header 'WM_SEC.AUTH_SIGNATURE: **************' \ --header 'WM_SEC.KEY_VERSION: 1' \ --header 'WM_CONSUMER.ID: adfwe-v23-faasd2r-afs-asdfqeff' \ --header 'WM_CONSUMER.INTIMESTAMP: 1565309779' \ --data '[ { "campaignId": 12345, "advertiserId": 10000, "name": "string", "description": "string", "objective": "awareness", "campaignType": "ngd", "startDate": "2023-12-05T12:00:00Z", "endDate": "2023-12-25T12:00:00Z", "budgetType": "total", "totalBudget": 10.0, "deliverySpeed": "evenly" }, { "campaignId": 23456, "advertiserId": 10000, "name": "string", "description": "string", "objective": "awareness", "campaignType": "ngd", "startDate": "2023-12-05T12:00:00Z", "endDate": "2023-12-25T12:00:00Z", "budgetType": "total", "totalBudget": 10.0, "deliverySpeed": "frontloaded" } ]'

Response

ElementDescriptionType
codeThe response code can have following values:
  • success
  • failure

Click here for more information about Status Codes and Errors
string
detailsDetails will populate success or error message depending upon value of codestring
campaignIdID of the campaigninteger

Sample Response

[ { "code": "success", "details": ["string"], "campaignId": 1 } ]

Sample Response (Batch Operation)

[
{ "code": "success", "details": ["string"], "campaignId": 1
}, { "code": "failure", "details": ["stringA", "stringB"], "campaignId": 2 }
]