Skip to main content

POST/ad_campaign/{campaign_id}/bulk_create_keyword

Note: This method is only available for select partners who have been approved for the eBay Promoted Listings Advanced (PLA) program. For information about how to request access to this program, refer to Promoted Listings Advanced Access Requests in the Promoted Listings Playbook. To determine if a seller qualifies for PLA, use the getAdvertisingEligibility method in Account API.
This method adds keywords, in bulk, to an existing PLA ad group in a campaign that uses the Cost Per Click (CPC) funding model.

This method also sets the CPC rate for each keyword, depending on the selected bidding strategy, as follows:

  • FIXED: If the seller provides a keyword bid, that bid value will be used.

    If no bid is provided, the adgroup's default bid value will be used.
  • DYNAMIC: The eBay suggested bid will be used.

    If the seller passes in a value, a warning will be returned.

In the request, supply the campaign_id as a path parameter.

Call the getCampaigns method to retrieve a list of current campaign IDs for a specified seller.

Input

Resource URI

POST https://api.ebay.com/sell/marketing/v1/ad_campaign/{campaign_id}/bulk_create_keyword

This method is supported in Sandbox environment. To access the endpoint, just replace the api.ebay.com root URI with api.sandbox.ebay.com

URI parameters

ParameterTypeDescription
campaign_idstringThis path parameter specifies the unique eBay-assigned identifier of the ad campaign for which a set of keywords is being created.

Use the getCampaigns method to retrieve campaign IDs.

Occurrence: Required

HTTP request headers

All requests made to eBay REST operations require you to provide the Authorization HTTP header for authentication authorization.

The table below shows additional HTTP request headers that are either required, conditionally required, or strongly recommended for this method. Other standard HTTP request headers- opens rest request components page (not in this table) can also be used, but they are optional.

HeaderTypeDescription
Content-TypestringThis header indicates the format of the request body provided by the client. Its value should be set to application/json.

For more information, refer to HTTP request headers.

Occurrence: Required

OAuth scope

This request requires an access token created with the authorization code grant flow, using one or more scopes from the following list (please check your Application Keys page for a list of OAuth scopes available to your application):

https://api.ebay.com/oauth/api_scope/sell.marketing

See OAuth access tokens for more information.

Request payload

Copy complete valid JSON to clipboard

Request fields

Input container/fieldTypeDescription
requestsarray of CreateKeywordRequest

This array is used to pass in multiple keywords for one or more ad groups that belong to a campaign that uses the Cost Per Click (CPC) funding model. Up to {max value} keywords can be created with one call.

Occurrence: Required

requests.adGroupIdstring

This adGroupId is created when an ad group is first created and associated with a campaign. This is the ad group that the corresponding keyword will be added to. This ad group must be a part of the campaign that is specified in the call URI. Use the getAdGroups method to retrieve the ad group IDs for a seller, and getKeywords to retrieve the keyword IDs for a seller's keywords.

Occurrence: Required

requests.bidAmount

This container is used to set the bid for the keyword. Each time a listing is retrieved in search results using this keyword and clicked on, the seller will be charged this amount. Each click goes toward the daily budget set up for the CPC campaign. If the bid is not provided, then the default bid associated with the ad group is used.

Note: You can call the suggestBids method to retrieve the suggested bids for keywords.

Occurrence: Optional

requests.bid.currencyCurrencyCodeEnum

The base currency applied to the value field to establish a monetary amount.

The currency is represented as a 3-letter ISO 4217 currency code. For example, the code for the Canadian Dollar is CAD.

Default: The default currency of the eBay marketplace that hosts the listing.

Occurrence: Conditional

requests.bid.valuestring

The monetary amount in the specified currency.

Required in the amount type.

Occurrence: Conditional

requests.keywordTextstring

The text of the keyword. Keywords are not case sensitive and compound words can be used without additional encoding (for example, tennis ball).

Maximum number of characters: 100

Maximum number of words: 10

Occurrence: Required

requests.matchTypeMatchTypeEnum

A field that defines the match type for the keyword.

Valid Values:

  • BROAD
  • EXACT
  • PHRASE

Occurrence: Required

Output

HTTP response headers

This call has no response headers.

Response payload

Response fields

Output container/fieldTypeDescription
responsesarray of KeywordResponse

A list of keywords that have been processed by the request.

Occurrence: Conditional

responses.adGroupIdstring

The identifier of the ad group that the keyword was added to.

Occurrence: Always

responses.errorsarray of ErrorDetailV3

This container will be returned if there is an issue creating the corresponding keyword and/or adding that keyword to the corresponding ad group.

Occurrence: Conditional

responses.errors.categorystring

The category type for this error or warning. It takes an ErrorCategory object which can have one of three values:

  • Application: Indicates an exception or error occurred in the application code or at runtime. Examples include catching an exception in a service's business logic, system failures, or request errors from a dependency.
  • Business: Used when your service or a dependent service refused to continue processing on the resource because of a business rule violation such as "Seller does not ship item to Antarctica" or "Buyer ineligible to purchase an alcoholic item". Business errors are not syntactical input errors.
  • Request: Used when there is anything wrong with the request, such as authentication, syntactical errors, rate limiting or missing headers, bad HTTP header values, and so on.

Occurrence: Conditional

responses.errors.domainstring

Name of the domain containing the service or application.

Occurrence: Conditional

responses.errors.errorIdinteger

A positive integer that uniquely identifies the specific error condition that occurred. Your application can use error codes as identifiers in your customized error-handling algorithms.

Occurrence: Conditional

responses.errors.inputRefIdsarray of string

Identifies specific request elements associated with the error, if any. inputRefId's response is format specific. For JSON, use JSONPath notation.

Occurrence: Conditional

responses.errors.longMessagestring

An expanded version of message that should be around 100-200 characters long, but is not required to be such.

Occurrence: Conditional

responses.errors.messagestring

An end user and app developer friendly device agnostic message. It explains what the error or warning is, and how to fix it (in a general sense). Its value is at most 50 characters long. If applicable, the value is localized in the end user's requested locale.

Occurrence: Conditional

responses.errors.outputRefIdsarray of string

Identifies specific response elements associated with the error, if any. Path format is the same as inputRefId.

Occurrence: Conditional

responses.errors.parametersarray of ErrorParameterV3

This optional complex field type contains a list of one or more context-specific ErrorParameter objects, with each item in the list entry being a parameter (or input field name) that caused an error condition. Each ErrorParameter object consists of two fields, a name and a value.

Occurrence: Conditional

responses.errors.parameters.namestring

Name of the entity that threw the error.

Occurrence: Conditional

responses.errors.parameters.valuestring

A description of the error.

Occurrence: Conditional

responses.errors.subdomainstring

Name of the domain's subsystem or subdivision. For example, checkout is a subdomain in the buying domain.

Occurrence: Conditional

responses.hrefstring

The getKeyword URI for the keyword, which is used to retrieve the keyword. This URI will be returned for each successfully created keyword.

Occurrence: Conditional

responses.keywordIdstring

A unique eBay-assigned ID for a keyword that is generated for an ad group. This keyword ID will be generated for each successfully created keyword.

Occurrence: Conditional

responses.keywordTextstring

The text of the keyword.

Occurrence: Conditional

responses.matchTypeMatchTypeEnum

A field that defines the match type for the keyword.

Valid Values:

  • BROAD
  • EXACT
  • PHRASE

Occurrence: Conditional

responses.statusCodeinteger

An HTTP status code is returned for each keyword to indicate the success or failure of adding that keyword to the ad group.

Occurrence: Conditional

responses.warningsarray of ErrorDetailV3

List of warnings associated with this operation

Occurrence: Conditional

responses.warnings.categorystring

The category type for this error or warning. It takes an ErrorCategory object which can have one of three values:

  • Application: Indicates an exception or error occurred in the application code or at runtime. Examples include catching an exception in a service's business logic, system failures, or request errors from a dependency.
  • Business: Used when your service or a dependent service refused to continue processing on the resource because of a business rule violation such as "Seller does not ship item to Antarctica" or "Buyer ineligible to purchase an alcoholic item". Business errors are not syntactical input errors.
  • Request: Used when there is anything wrong with the request, such as authentication, syntactical errors, rate limiting or missing headers, bad HTTP header values, and so on.

Occurrence: Conditional

responses.warnings.domainstring

Name of the domain containing the service or application.

Occurrence: Conditional

responses.warnings.errorIdinteger

A positive integer that uniquely identifies the specific error condition that occurred. Your application can use error codes as identifiers in your customized error-handling algorithms.

Occurrence: Conditional

responses.warnings.inputRefIdsarray of string

Identifies specific request elements associated with the error, if any. inputRefId's response is format specific. For JSON, use JSONPath notation.

Occurrence: Conditional

responses.warnings.longMessagestring

An expanded version of message that should be around 100-200 characters long, but is not required to be such.

Occurrence: Conditional

responses.warnings.messagestring

An end user and app developer friendly device agnostic message. It explains what the error or warning is, and how to fix it (in a general sense). Its value is at most 50 characters long. If applicable, the value is localized in the end user's requested locale.

Occurrence: Conditional

responses.warnings.outputRefIdsarray of string

Identifies specific response elements associated with the error, if any. Path format is the same as inputRefId.

Occurrence: Conditional

responses.warnings.parametersarray of ErrorParameterV3

This optional complex field type contains a list of one or more context-specific ErrorParameter objects, with each item in the list entry being a parameter (or input field name) that caused an error condition. Each ErrorParameter object consists of two fields, a name and a value.

Occurrence: Conditional

responses.warnings.parameters.namestring

Name of the entity that threw the error.

Occurrence: Conditional

responses.warnings.parameters.valuestring

A description of the error.

Occurrence: Conditional

responses.warnings.subdomainstring

Name of the domain's subsystem or subdivision. For example, checkout is a subdomain in the buying domain.

Occurrence: Conditional

HTTP status codes

This call can return one of the following HTTP status codes. For an overview of the status codes, see HTTP status codes in Using eBay RESTful APIs.

StatusMeaning
200Success
207Multi Status
400Bad Request
404Not Found
409Business error
500Internal Server error

Error codes

For more on errors, plus the codes of other common errors, see Handling errors.

CodeDomainCategoryMeaning
35001API_MARKETINGAPPLICATIONThere was a problem with an eBay internal system or process. Contact eBay Developer Technical Support for assistance.
35002API_MARKETINGAPPLICATIONInternal error. Please wait a few minutes and try the call again.
35033API_MARKETINGREQUESTAt least one request is required for bulk requests.
35035API_MARKETINGREQUESTThe campaign with campaign id {campaign_id} has ended.
35045API_MARKETINGREQUESTNo campaign found for campaign id {campaign_id}.
35089API_MARKETINGBUSINESSWe are currently testing a premium ads product with a small invite-only group. We will share more information when we are ready to expand.
36210API_MARKETINGREQUESTNo ad group found for ad group id {ad_group_id}.
36219API_MARKETINGREQUESTThe ad group with ad group id {ad_group_id} has been archived.
36301API_MARKETINGREQUESTThe keyword match type {matchType} is not supported. Valid values are: {matchTypeValues}.
36303API_MARKETINGREQUESTA keyword with text {keywordText} and match type {matchType} already exists for this Ad Group.
36304API_MARKETINGREQUESTThe keywordText {keywordText} cannot be more than {maxKeywordTextLength} characters.
36305API_MARKETINGREQUESTThe 'bid' value {bidValue} is not valid. The default bid value should be a double precision value.
36306API_MARKETINGREQUESTThe 'bid' value {bidValue} is below floor value {bidFloorValue}.
36307API_MARKETINGREQUESTThe 'bid' value {bidValue} is above max value {bidMaxValue}.
36308API_MARKETINGREQUESTThe 'bid' currency {bidCurrency} is not valid or missing.
36309API_MARKETINGREQUESTThe 'bid' currency {bidCurrency} should be the same as the daily budget.
36311API_MARKETINGREQUESTThe keywordText cannot be null or empty.
36312API_MARKETINGREQUESTThe keywordText contains invalid characters {invalidCharacters}
36313API_MARKETINGREQUESTThe 'bid' value {bidValue} is more than maximum daily budget {maxDailyBudget}.
36315API_MARKETINGREQUESTThere are duplicate KeywordText and matchType combination in this request. You must remove the duplicate.
36316API_MARKETINGBUSINESSYou have exceeded the maximum number of Keyword requests in a bulk request. Only {maxSupportedRequestNumberInBulk} Ids are supported per call.
36319API_MARKETINGBUSINESSYou have exceeded the maximum number of create Keyword for an Ad Group. Only {maxSupportedNumber} Ids are supported per Ad Group.
36320API_MARKETINGBUSINESSThe keywordText {keywordText} cannot have total number of words more than {maxWordsInKeyword} words.
36322API_MARKETINGBUSINESSTotal keyword requests exceed the current AdGroup keyword capacity, which is {maxSupportedRequestNumber}.

Warnings

For more on warnings, plus the codes of other common warnings, see Handling errors.

CodeDomainCategoryMeaning
35133API_MARKETINGBUSINESSThe bid provided in the call was ignored because the selected biddingStrategy is DYNAMIC for the campaign.

Samples

New to making API calls? Please see Making a Call.

Note: Identifiers, such as order IDs or user IDs, and personal data in these samples might be anonymized or may no longer be active on eBay. If necessary, substitute current, relevant eBay data in your requests.

Sample 1: Create keywords in bulk

This sample creates keywords, in bulk, for a Promoted Listings Advanced (PLA) ad campaign.

Input

The inputs for this sample are the campaign_id of the PLA ad campaign for which the keywords shall be created, as well as the keyword details (such as the match type, keyword text, and ad group) in the request body.

POSThttps://api.ebay.com/sell/marketing/v1/ad_campaign/1********4/bulk_create_keyword

Output

If the call is successful, the details for the newly-created keywords (such as the keyword IDs and statuses) are returned.

Sample 2: Create keywords in bulk for a campaign that is using dynamic bidding

This sample creates keywords, in bulk, for a campaign that is using the dynamic bidding strategy.

Input

This sample creates keywords, in bulk, for a campaign that is using the dynamic bidding strategy. Since dynamic bidding does not support seller-specified bid values, the bid.value and bid.currency parameters should be omitted from the request payload.

POSThttps://api.ebay.com/sell/marketing/v1/ad_campaign/1********4/bulk_create_keyword

Output

A successful call returns the HTTP status code 200 Success and includes the details of the newly-created keywords (e.g., the keyword IDs and statuses).

If values for the bid.value and bid.currency parameters have been included in the request payload, the following Warning message is returned:

The bid provided in the call was ignored because the selected biddingStrategy is DYNAMIC for the campaign.