Skip to content

Campaigns

Overview

Campaign API provides capability to retrieve, create, update and delete campaigns for a specific advertiser.

Usage:

  • To retrieve a specific campaign or all the campaigns for a specific advertiser
  • To create a new campaign in a draft state for a specific advertiser
  • To update an existing campaign

Limitations:

  • A maximum of 50 campaigns can be created/updated in a single POST/PUT batch request
  • A maximum of 50 campaigns can be deleted in a single PUT batch request
  • Limit on length of campaign name is 255 characters
  • There is no limit on number of ad groups to be created within a campaign
  • There is no limit on the amount of daily budget that can carry forward to the next day
  • If the daily budget is defined, unspent budget from the present day will be carried forward to the next day. Maximum budget spent on a given day will be limited to twice of the set daily Budget amount
  • Campaigns go live at PST midnight of the scheduled start date
  • Maximum number of campaigns that an advertiser can create per advertiser account is 5000

Details about ‘Request Header' and 'Authorization’ are available in the Authorization Guide

List All the Campaigns

Description: Retrieve a specific campaign or all the campaigns for a specific advertiser. Deleted campaigns will not be included.

End Point: /api/v1/campaigns

HTTP Method: ​GET

Query Parameters

Parameter Description Type Required Possible Values
campaignId The ID of the campaign. It returns a specific campaign in response Integer N A valid campaign ID
advertiserId The ID of the advertiser. It returns all campaigns run by specific advertiser in response Integer Y Advertiser ID for which the campaign(s) is(are) to be retrieved
filter[name] A valid campaign name with which the desired campaign can be searched in the absence of campaign id String N Provide a campaign name to search the relevant campaign by name instead of campaign Id.
filter[lastModifiedDate] Provide a date to fetch only those campaigns which were modified on or after that date Note: Modified here means: If there was any change to campaign set up Date N Date should be in format: yyyy-mm-dd

Sample Request

1
2
3
4
5
6
7
8
curl --location 
'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns?advertiserId={advertiserId}'
--header 'Authorization: Bearer ***********' 
--header 'wm_consumer.id: *****************' 
--header 'wm_sec.key_version: 2' 
--header 'wm_sec.auth_signature: ****************' 
--header 'wm_qos.correlation_id: 12345' 
--header 'wm_consumer.intimestamp: 1707139867000' 
 OkHttpClient client = new OkHttpClient().newBuilder()
.build();
 MediaType mediaType = MediaType.parse("text/plain");
 RequestBody body = RequestBody.create(mediaType, "");
 Request request = new Request.Builder()
 .url("https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns?advertiserId={advertiserId}") 
.method("GET", body)
.addHeader("Authorization", "Bearer ***********")
.addHeader("wm_consumer.id", "*************")
.addHeader("wm_sec.key_version", "2")
.addHeader("wm_sec.auth_signature", "*************")
.addHeader("wm_qos.correlation_id", "12345")
.addHeader("wm_consumer.intimestamp", "1707139867000")
.build(); 

Response response = client.newCall(request).execute();
const axios = require('axios'); 
let data = ''; 
let config = { 
method: 'get', 
maxBodyLength: Infinity, 

url: 'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns?advertiserId={advertiserId}', 

headers: {  
    'wm_consumer.id': '************',  
    'wm_sec.key_version': '2',  
    'wm_sec.auth_signature': '**************',  
    'wm_qos.correlation_id': '12345',  
    'wm_consumer.intimestamp': '**************',  
    'Authorization': 'Bearer ************' 
}, 
data : data 
}; 
axios.request(config) 
.then((response) => { 
console.log(JSON.stringify(response.data)); 
}) 
.catch((error) => { 
console.log(error); 

}); 
import requests 

url = "https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns?advertiserId={advertiserId}" 
payload = "" 
headers = { 
'Authorization': 'Bearer ***************',
'wm_consumer.id': '************', 
'wm_sec.key_version': '2', 
'wm_sec.auth_signature': '************', 
'wm_qos.correlation_id': '12345', 
'wm_consumer.intimestamp': '1707139867000' 
    } 
response = requests.request("GET", url, headers=headers, data=payload) 
print(response.text) 

Response

Element Description Type
name Name of the campaign String
campaignType Type of campaign. Possible values for campaign type are: sponsoredProducts, sba   Note: You receive campaign type “sba” in association with targeting type “manual” (for Search Brand Amplifier campaigns) String
targetingType The targeting type of the campaign is a set of options to create campaigns with different bidding types.  Possible values to targeting type are: manual, auto
Note: You receive targeting type as “manual” in case of keyword bidding campaigns (including Search Brand Amplifier)
String
status Specified status of campaign. Possible status values are: Proposal, Scheduled, Rescheduled, Live, Paused, Completed, Deleted
Note: If you extend an already completed campaign, the campaign status will change to “rescheduled” and will eventually switch to “live”
Object
budgetType The type of budget allocation chosen for this campaign. Possible values of budgetType are: Daily, Total, Both String
startDate The date to start campaign Date
endDate The date when Campaign ends.  It returns value 9999-12-30 if running indefinitely Date
totalBudget Total budget of campaign Double
dailyBudget Daily budget of campaign Double
rollover The indicator to suggest if the unspent daily budget from the previous day should be carried forward to next day’s daily budget or not. The default and only value of rollover is “true” at present. Boolean
campaignId The ID of the campaign Integer
advertiserId The ID of the advertiser for which the campaign is retrieved Integer

Sample Response

[
    {
    "name": "name1",
    "campaignType": "sponsoredProducts",
    "targetingType": "auto",
    "status": "enabled",
    "budgetType": "both",
    "startDate": "2019-07-03",
    "endDate": "2019-08-03",
    "totalBudget": 5000,
    "dailyBudget": 500,
    "rollover": true,
    "advertiserId": 600001,
    "campaignId": 500003,
  }
]

HTTP Status Code

Status Code Description Possible Error Messages
400 Bad Request advertiserId not found in request
403 Forbidden
  • User not Authenticated
  • You don't have access to this advertiser
429 Too Many Requests <Exception Message>
500 Internal Server Error There was an error processing the request

Create a new Campaign

Description: Create a new campaign in a draft state for a specific advertiser.

End Point: /api/v1/campaigns

HTTP Method: POST

Query Parameters

Parameter Description Type Required Possible Values
advertiserId The ID of the advertiser for whom the ad group(s) should be returned Integer Y Unique numeric identifier

Body Parameters

Parameter Description Type Required
Possible Values
name The name of the campaign Integer N The campaign name should be unique and correspond to the campaign ID
status Specified status of the campaign String N enabled: use this status to schedule a paused campaign
paused: use this status to pause a live campaign
completed: use this status to end a live campaign
extend: You can resume an already completed campaign to reuse it without having to create same campaign again with help of “extend”
proposal: use this status when a scheduled campaign which has never gone live, has been modified and needs to be re-submitted for review


For more details, please refer Note section below the table
campaignType Type of campaign. Possible values for campaign type are: sponsoredProducts sba String N sba, keyword

Note: You receive campaign type “sba” in association with targeting type “manual” (for Search Brand Amplifier campaigns)

targetingType The targeting type of the campaign is a set of options to create campaigns with different bidding types. String N Possible values to targeting type are: manual auto

Note: You receive targeting type as “manual” in case of keyword bidding campaigns (including Search Brand Amplifier)

startDate The date to start campaign date N Date should be in format: yyyy-mm-dd
endDate The date when Campaign ends. You can choose to run the campaign indefinitely as well date N To run campaign indefinitely, set its value as 9999-12-30
budgetType The type of budget allocation you want to choose for your campaign. String N Possible values: daily, total, both
totalBudget Total budget of campaign double N For 1p seller: The value of Total budget should at least be $100
dailyBudget Daily budget of campaign.

Note: Daily budget cannot exceed your total budget amount There is no limit on the amount of daily budget that can carry forward to the next day

double N For 1p seller: The value of daily budget should at least be $50
rollover The indicator to suggest if the unspent daily budget from the previous day should be carried forward to next day’s daily budget boolean N Possible values: true

Note: Currently rollover only accepts “true” as a value. However, in future it may be updated to accept “false” as well.

advertiserId The ID of the advertiser. It returns all campaigns run by specific advertiser in response Integer Y Advertiser ID for which the campaign(s) is(are) to be retrieved

Note:

The status parameter - When you try to enable a Search Brand Amplifier (SBA) campaign in “paused” or “proposal” status, and if the campaign is not eligible to go live, the error message will specifically outline the criteria that campaign fails to meet, which could be either or a combination of these:

  • SBA Profile enabled and approved
  • Items enabled and approved
  • Keyword enabled and approved

Proposal status is only applicable for SBA campaigns. Post review completion, the campaign status will automatically change to “enabled” then “scheduled” and finally to “live”. However, the campaign must be eligible to go live. A campaign can only go “live” when its start date is defined and following are approved - SBA Profile, Items & Keyword. If a campaign review is revised for SBA Profile such that the SBA Profile is rejected by MAP team, the campaign will be “paused”. A “paused” campaign cannot stay “live” or cannot be auto scheduled. If this happens, you need to change the campaign profile as per guidelines and resubmit it for review. If you extend an ended campaign, the system will auto-change the status to “rescheduled” and then to “live” as per the defined start date for campaign. A campaign can be auto scheduled only if it is in “proposal” status.

Sample Request

curl --location 
'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns' 
--header 'Authorization: Bearer *********** ' 
--header 'Content-Type: application/json'
--header 'wm_consumer.id: ************************* '
--header 'wm_sec.key_version: 2' 
--header 'wm_sec.auth_signature: *************************' 
--header 'wm_qos.correlation_id: 12345' 
--header 'wm_consumer.intimestamp: 1707139867000'  
--data '[
    {
        "name": "XXX - Sams _ Auto", 
        "campaignType": "sponsoredProducts", 
        "targetingType": "manual", 
        "status": "enabled", 
        "budgetType": "total", 
        "startDate": "2024-02-05", 
        "endDate": "2024-02-16", 
        "totalBudget": 10000, 
        "dailyBudget": 0, 
        "rollover": true, 
        "advertiserId": 1234 
    }
]'
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, 
"[
    {
        "name": "XXX - Sams _ Auto", 
        "campaignType": "sponsoredProducts",
        "targetingType": "manual",
        "status": "enabled",
        "budgetType": "total",
        "startDate": "2024-02-05",
        "endDate": "2024-02-16",
        "totalBudget": 10000,
        "dailyBudget": 0,
        "rollover": true,
        "advertiserId": 1234
    }
]");

Request request = new Request.Builder()
.url("https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns") 
.method("POST", body)
.addHeader("Authorization", "Bearer ***********")
.addHeader("Content-Type", "application/json")
.addHeader("wm_consumer.id", "***********************")
.addHeader("wm_sec.key_version", "2")
.addHeader("wm_sec.auth_signature", "******************************")
.addHeader("wm_qos.correlation_id", "12345")
.addHeader("wm_consumer.intimestamp", "1707139867000")
.build(); 
Response response = client.newCall(request).execute();
const axios = require('axios'); 
let data = JSON.stringify([ 
{ 
    "name": "XXX - Sams _ Auto",  
    "campaignType": "sponsoredProducts", 
    "targetingType": "manual", 
    "status": "enabled", 
    "budgetType": "total", 
    "startDate": "2024-02-05", 
    "endDate": "2024-02-16", 
    "totalBudget": 10000, 
    "dailyBudget": 0, 
    "rollover": true, 
    "advertiserId": 1234 
} 
]); 

let config = { 
method: 'post', 
maxBodyLength: Infinity, 
url: 'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns', 

headers: {  
    'wm_consumer.id': '************',  
    'wm_sec.key_version': '2',  
    'wm_sec.auth_signature': '**************',  
    'wm_qos.correlation_id': '12345',  
    'wm_consumer.intimestamp': '**************',  
    'Content-Type': 'application/json',  
    'Authorization': 'Bearer ************' 
 }, 
data : data 
}; 
axios.request(config) 
.then((response) => { 
console.log(JSON.stringify(response.data)); 
}) 
.catch((error) => { 
console.log(error); 
}); 
import requests 

url = "https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns" 
payload = json.dumps([ 
{ 
    "name": "XXX - Sams _ Auto", 
    "campaignType": "sponsoredProducts", 
    "targetingType": "manual", 
    "status": "enabled", 
    "budgetType": "total", 
    "startDate": "2024-02-05", 
    "endDate": "2024-02-16", 
    "totalBudget": 10000, 
    "dailyBudget": 0, 
    "rollover": True, 
    "advertiserId": 1234
} 
]) 
headers = { 
'Authorization': 'Bearer ***************',
'Content-Type': 'application/json',
'wm_consumer.id': '************', 
'wm_sec.key_version': '2', 
'wm_sec.auth_signature': '************', 
'wm_qos.correlation_id': '12345', 
'wm_consumer.intimestamp': '1707139867000'
} 
response = requests.request("POST", url, headers=headers, data=payload) 
print(response.text) 

Response

Element Description Type
code Possible values of response code: success or failure String
details Details of the error if value of response code is failure String
campaignId ID of the campaign Integer

Sample Response

[
    {
        "code": "success",
        "details": "",
        "campaignId": 21257
    }
]

HTTP Status Code

Status Code Description Possible Error Messages
400 Bad Request
  • Input not valid
  • Maximum allowed size in batch is 50
  • Campaign name validation failed
  • Campaign type validation failed
  • Targeting type validation failed
  • Status validation failed
  • Budget type validation failed
  • Start date validation failed
  • End date validation failed
  • Start date should be before end date
  • Campaign end date should be greater than or equal to today's date
  • Total budget validation failed. The total budget should be between $1000 and $1 Million.
  • Daily budget validation failed. The daily budget should be between $100 and Total Campaign Budget .
  • Advertiser Id validation failed
  • Channel validation failed, valid values are WALMARTs and ONLINE_GROCERY .
  • Daily Budget cannot be more than Total Budget
  • Empty Input
  • Invalid campaign name
  • advertiser Id not found.
  • Advertiser Id: <advertiserId> is not eligible for this type of campaign. Please ensure that your brand is registered as an approved brand with brandportal.walmart.com before submitting this campaign create request.
  • Advertiser <advertiserId> is not eligible for passing dynamic bidding attribute
  • Advertiser <advertiserId> is not allowed to use this feature
  • Budget type validation failed. Please send a valid budget type value.
  • You have exceeded the maximum number of 5000 campaigns per account. Please end existing campaigns to continue.
403 Forbidden
  • User not Authenticated
  • AdOps role does not access to any campaigns
  • You do not have access to create this campaign
429 Too Many Requests <Exception Message>
500 Internal Server Error There was an error processing the request

Update Existing Campaigns

Description: Update an existing campaign

End Point: /api/v1/campaigns

HTTP Method: PUT

Query Parameters

Parameter Description Type Required
Possible Values
advertiserId The ID of the advertiser. It returns all campaigns run by specific advertiser in response Integer N Advertiser ID for which the campaign(s) is(are) to be retrieved

Body Parameters

Parameter Description Type Required Possible Values
campaignId The ID of the campaign. It returns a specific campaign in response Integer Y A valid campaign ID
name Name of the campaign String Y Relevant String value representing the ad group
status Specified status of campaign Object Y Possible status values are: Proposal, Scheduled, Rescheduled, Live, Paused, Completed, Deleted

Sample Request

curl --location 
'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns'
--header 'Authorization: Bearer ***********' 
--header 'Content-Type: application/json' 
--header 'wm_consumer.id: *************************' 
--header 'wm_sec.key_version: 2' 
--header 'wm_sec.auth_signature: *************************' 
--header 'wm_qos.correlation_id: 12345' 
--header 'wm_consumer.intimestamp: 1707139867000 '
--data '[
{
    "name": "XXXX - Sams _ Auto",  
    "status": "enabled", 
    "campaignId": 1234 
}
]'
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, 
"[
    {
        "name": "XXXX - Sams _ Auto",
        "status": "enabled",
        "campaignId": 1234
    }
]");
Request request = new Request.Builder()
.url("https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns") 
.method("PUT", body)
.addHeader("Authorization", "Bearer ***********")
.addHeader("Content-Type", "application/json")
.addHeader("wm_consumer.id", "***********************")
.addHeader("wm_sec.key_version", "2")
.addHeader("wm_sec.auth_signature", "*********************")
.addHeader("wm_qos.correlation_id", "12345")
.addHeader("wm_consumer.intimestamp", "1707139867000")
.build();
Response response = client.newCall(request).execute();
const axios = require('axios'); 
let data = JSON.stringify([ 
{ 
    "name": "XXXX - Sams _ Auto", 
    "status": "enabled", 
    "campaignId": 1234

} 
]); 
let config = { 
method: 'put', 
maxBodyLength: Infinity, 

url: 'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns', 

headers: {  
    'wm_consumer.id': '************',  
    'wm_sec.key_version': '2',  
    'wm_sec.auth_signature': '**************',  
    'wm_qos.correlation_id': '12345',  
    'wm_consumer.intimestamp': '**************',  
    'Content-Type': 'application/json',  
    'Authorization': 'Bearer ************' 
}, 
data : data 
}; 
axios.request(config) 
.then((response) => { 
console.log(JSON.stringify(response.data)); 
}) 
.catch((error) => { 
console.log(error); 
}); 
import requests 

url = "https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns" 
payload = ([ 
{ 
    "name": "XXXX - Sams _ Auto", 
    "status": "proposal", 
    "campaignId": 1234
} 
]) 
headers = { 
'Authorization': 'Bearer ***************',
'Content-Type': 'application/json',
'wm_consumer.id': '************', 
'wm_sec.key_version': '2', 
'wm_sec.auth_signature': '************', 
'wm_qos.correlation_id': '12345', 
'wm_consumer.intimestamp': '1707139867000'

} 
response = requests.request("PUT", url, headers=headers, data=payload) 
print(response.text) 

Response

Element Description Type
code Shows status of the ad group update operation Values:success or failure String
details Details of the update String
campaignId Id of the campaign being updated Integer

Sample Response

[
    {
        “code”: “success”,
        “campaignId”: 500001,
        “details”: “”
    }
],
[
    {
        “code”: “failure”,
        “details”: “Campaign not found”,
        “campaignId”: 3
    }
]

HTTP Status Code

Status Code Description Possible Error Messages
400 Bad Request
  • Maximum allowed size in batch is 50
  • Campaign Id validation failed
  • Campaign name validation failed
  • Campaign type validation failed
  • Targeting type validation failed
  • Status validation failed
  • Please provide an end date to extend the campaign
  • Campaign end date should be greater than or equal to today's date
  • Start date should be before end date
  • Budget type validation failed
  • Advertiser Id validation failed
  • Channel is invalid parameter while updating campaign
  • Campaign is not schedulable
  • EMPTY INPUT
  • Invalid campaign name
  • Campaign is rescheduled to proposal status due to:<Exception Message>
403 Forbidden
  • User not Authenticated
  • you do not have access to update this campaign
404 Not Found Campaign not found
422 Operation Not Allowed
  • You can only refresh a completed campaign
  • Campaign cannot be updated in current state
429 Too Many Requests <Exception Message>
500 Internal Server Error There was an error processing the request

Delete Existing Campaigns

Description: Delete an existing campaign and its ad groups if campaign is scheduled but hasn’t gone live. You cannot delete a campaign that has gone live.

Notes:

  • It allows you to delete one or more campaigns
  • You will be able to delete any campaign which has never gone Live
  • Once campaigns go live:
    • They cannot be deleted
    • Ad Items/Ad Groups/Keywords in the campaign cannot be deleted, but they can be disabled
    • Campaign start date and end date cannot be changed

End Point: /api/v1/campaigns/delete

HTTP Method: PUT

Query Parameters

Parameter Description Type Required Possible Values
advertiserId The ID of the advertiser. It returns all campaigns run by specific advertiser in responsen Integer N Advertiser ID for which the campaign(s) is(are) to be retrieved

Body Parameters

Parameter Description Type Required Possible Values
campaignId The ID of the campaign Integer Y Unique numeric identifier

Sample Request

curl --location --request PUT 
'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns/delete'
--header 'Authorization: Bearer ***********'
--header 'Content-Type: application/json' 
--header 'wm_consumer.id: *************************' 
--header 'wm_sec.key_version: 2' 
--header 'wm_sec.auth_signature: *************************' 
--header 'wm_qos.correlation_id: 12345' 
--header 'wm_consumer.intimestamp: 1707139867000' 
--data '[
{
    "campaignId": 1234
}
]'
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, 
"[
    {
        "campaignId": 1234
    }

]");
Request request = new Request.Builder()
.url("https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns/delete")
.method("PUT", body)
.addHeader("Authorization", "Bearer ***********")
.addHeader("Content-Type", "application/json")
.addHeader("wm_consumer.id", "***********************")
.addHeader("wm_sec.key_version", "2")
.addHeader("wm_sec.auth_signature", "****************************")
.addHeader("wm_qos.correlation_id", "12345")
.addHeader("wm_consumer.intimestamp", "1707139867000")
.build();
Response response = client.newCall(request).execute(); 
const axios = require('axios'); 
let data = JSON.stringify({
"campaignId": 1234
}); 
let config = { 
method: 'put', 
maxBodyLength: Infinity, 

url: 'https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns/delete', 

headers: {  
    'wm_consumer.id': '************',  
    'wm_sec.key_version': '2',  
    'wm_sec.auth_signature': '**************',  
    'wm_qos.correlation_id': '12345',  
    'wm_consumer.intimestamp': '**************',  
    'Content-Type': 'application/json',  
    'Authorization': 'Bearer ************' 
}, 
data : data 
}; 
axios.request(config).then((response) => { 
console.log(JSON.stringify(response.data)); 
}).catch((error) => { 
console.log(error); 
}); 
import requests 

url = "https://developer.api.us.stg.walmart.com/api-proxy/service/sp/api-sams/v1/api/v1/campaigns/delete" 
payload = ({ 
"campaignId": 1234 
}) 
headers = { 
'Authorization': 'Bearer ***************',
'Content-Type': 'application/json',
'wm_consumer.id': '************', 
'wm_sec.key_version': '2', 
'wm_sec.auth_signature': '************', 
'wm_qos.correlation_id': '12345', 
'wm_consumer.intimestamp': '1707139867000'
} 
response = requests.request("PUT", url, headers=headers, data=payload) 
print(response.text) 

Response

Element Description Type
code Possible values of response code: success, failure String
details Response messages for success or failure String
campaignId Id of the campaign Integer

Sample Response

[
    {
        “code”: “success”,
        “campaignId”: 500001,
        “details”: “”
    }
]
[
    {
        “code”: “failure”,
        “details”: “Campaign not found”,
        “campaignId”: 3
    }
]

HTTP Status Code

Status Code Description Possible Error Messages
400 Bad Request
  • Maximum allowed size in batch is 50
  • Campaign Id validation failed
403 Forbidden
  • User not Authenticated
  • You do not have write permission to this advertiser
422 Operation Not Allowed
  • Campaign cannot be updated in current state
  • Campaign with ID cannot be deleted as it has been scheduled before
  • Cannot update status of completed campaigns
  • AdGroup with ID cannot be deleted as the campaign has been live before
429 Too Many Requests <Exception Message>
500 Internal Server Error There was an error processing the request