Create new campaign

📘

URL: ​POST/api/v1/campaigns

Note:

  • This API supports batch operations with a max batch size of 10. For bulk operation, the advertiser Id must be the same across all requests in the payload.
  • 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

Request Parameters

ParametersNotesTypeRequiredPossible Values
advertiserIdID of advertiser whose campaign is to be scheduledintegerYAdvertiser ID for which the campaign is to be created
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
objectiveCampaign objectivestringNValues:
awareness (default)
engagement
conversion

Note: For video campaigns, the only supported objective is awareness
campaignTypeThe type of the campaignstringNValues of campaignType: ngd
mediaTypeSpecifies the campaign's creative formatstringNValues:
- banner (default value)
- video
startDateThe date to start campaign

Note: It must be set either at campaign or ad group level
dateConditional. Required only if it is not set at ad group level. Cannot be changed to ad group level later.Date format: yyyy-MM-dd'T'HH:mm:ss.SSSXXX

Notes:
- 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) and normalized to the start of the hour. Minutes and seconds are truncated.
- Example: 2025-07-20T19:10:10-05:00 becomes 2025-07-20T19:00:00-05:00 in ET
endDateThe date when campaign ends

Note: It must be set either at campaign or ad group level
dateConditional. Required only if it is not set at ad group level. Cannot be changed to ad group level later.Date format: yyyy-MM-dd'T'HH:mm:ss.SSSXXX

To run campaign indefinitely, use 9999-12-30T00:00:00Z

Notes:
- All timestamp values must be in ISO 8601 format
- Values are internally converted to ET and normalized to the hour
- endDate must be after 12:00 PM ET or an error is returned
- If set to exactly 00:00:00 ET, it is interpreted as 23:59:59 of the previous day
budgetTypeThe type of budget allocation you want to choose for your campaign

Note: It must be set either at campaign or ad group level. Campaigns scheduled indefinitely must use a daily budget.
stringConditional. Required only if it is not set at ad group level. Cannot be changed to ad group level later.Values:
- daily
- total
dailyBudgetDaily budget of campaign

Notes:
- Daily budget cannot exceed total budget amount
- Up to 20% of unspent budget rolls over to the next day
- Must be set either at campaign or ad group level
- Campaigns scheduled indefinitely must use a daily budget
doubleConditional. Required only if:
- Not set at ad group level
- budgetType is daily
Minimum value: $0.01

Note: Required only if budgetType is dailyBudget
totalBudgetTotal budget of campaign

Note: Must be set either at campaign or ad group level
doubleConditional. Required only if:
- Not set at ad group level
- budgetType is total
Minimum value: $0.01

Note: Required only if budgetType is totalBudget
deliverySpeedDetermines pacing of ad delivery

Note: Must be set either at campaign or ad group level
stringConditional. Required only if it is not set at ad group level. Cannot be changed to ad group level later.Values:
- frontloaded
- evenly

Note: frontloaded pacing is not supported if budgetType is daily

Note:

  • 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
  • If startDate, endDate, budgetType, dailyBudget, totalBudget, deliverySpeed are omitted, they must be defined at the ad group level
  • 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.
  • When mediaType is set to VIDEO, the allowed objective field is AWARENESS. If nothing is passed the default value will be set to AWARENESS.
  • During the campaign auto-setup flow, line items will be created asynchronously. The process may take up to 2 minutes to complete.
  • Only BANNER mediaType is allowed in campaign auto setup

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_SIGNATURESignature for authenticationYUse 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 POST \ '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 '[ { "advertiserId": 1, "name": "string", "description": "string", "objective": "string", "campaignType": "ngd", "startDate": "string", "endDate": "string", "budgetType": "daily", "dailyBudget": 1.0, "deliverySpeed": "evenly" } ]'

Sample Request (Batch Operation)

curl -X POST \ '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 ' [ { "advertiserId": 1, "name": "string", "description": "string", "objective": "string", "campaignType": "ngd", "startDate": "string", "endDate": "string", "budgetType": "string", "totalBudget": 10.0, "deliverySpeed": "evenly" }, { "advertiserId": 1, "name": "string", "description": "string", "objective": "string", "campaignType": "ngd", "startDate": "string", "endDate": "string", "budgetType": "string", "totalBudget": 10.0, "deliverySpeed": "frontloaded" }
]'

Sample Request: Create campaign with mediaType as VIDEO

curl -X POST \ 'https://developer.api.us.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_CONSUMER.ID: abcde-v123-fa2r-a1fs-asd45f6qef' \
--header 'WM_SEC.KEY_VERSION: 1' \
--header 'WM_CONSUMER.intimestamp: 1565309779' \
--data '[{ "advertiserId": 1, "name": "string", "description": "string", "objective": "AWARENESS", "campaignType": "NGD", "startDate": "2025-01-01T12:00:00.000Z", "endDate": "2025-01-31T12:00:00.000Z", "budgetType": "TOTAL", "totalBudget": 10000.0, "deliverySpeed": "EVENLY", "mediaType": "VIDEO" }
]'

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 campaign. This will be returned only when code=successinteger
nameName of the campaignstring

Sample Response

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

Sample Response (Batch Operation)

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