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

Parameters Notes Type Required Possible Values
advertiserId ID of advertiser whose campaign is to be scheduled integer Y Advertiser ID for which the campaign is to be created
name The name of the campaign
**_Note_**_: Limit on length of campaign name is 240 characters_
string Y The campaign name should be unique
description Campaign description
**_Note_**_: Limit on length of campaign description is 240 characters_
string N Provide valid description corresponding to campaign type
objective Campaign objective string N Values:
awareness (default value)
engagement
conversion
**_Note:_** For video campaigns, the only supported objective is `awareness`
campaignType The type of the campaign string N Values of campaignType: ngd
mediaType Specifies the campaign's creative format. string N Values:
banner (default value)
video
startDate The date to start campaign
**_Note_**_: it must be set either at campaign or ad group level_
date Conditional.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._
endDate The date when campaign ends
**_Note_**_: it must be set either at campaign or ad group level_
date Conditional.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_
_Campaigns scheduled to run indefinitely must use a daily budget_
string Conditional.This field is required only if it is not set at ad group level. Cannot be changed to ad group level later. Values: - daily - total
dailyBudget Daily 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
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 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_
totalBudget Total 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_
deliverySpeed Determines pacing of ad delivery
**_Note_**_: it must be set either at campaign or ad group level_
Conditional. This field is 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" } ]