ads_sp_create_optimization_rules

Create a Sponsored Products bid optimization rule — schedule or performance bid rules that raise bids automatically.

writeAmazon Adsads.sp

List existing rules first with ads_search_optimization_rules; a new rule changes nothing until it is associated with ads_associate_optimization_rules_to_campaign. Amazon Ads API · CreateOptimizationRules · POST /sp/rules/optimization Docs: https://advertising.amazon.com/API/docs/en-us/sponsored-products/3-0/openapi/prod#tag/Optimization-Rules/operation/CreateOptimizationRules Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.

Call it

In an AI client (MCP)

tools/call
{
  "name": "ads_sp_create_optimization_rules",
  "arguments": {
    "store": "myStore-US",
    "countryCode": "<countryCode>",
    "body": "<body>"
  }
}

From code (Tool API)

curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_sp_create_optimization_rules \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"store":"myStore-US","countryCode":"<countryCode>","body":"<body>"}'
Early access — the Tool API is open on request, contact us.

Arguments

NameTypeDescription
storerequiredstringthe store ref `<store>-<CC>` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim.
countryCoderequiredstringthe Ads profile's 2-letter country code (e.g. 'US').
bodyrequiredobject[] | objectone rule object, a list, or Amazon's {optimizationRules: [...]} envelope (all accepted) — v1 takes exactly ONE rule per call, v2 1–300.
apiVersionstringv1 (default — BID+SCHEDULE only) | v2 (adds PERFORMANCE rules — ruleCategory TARGETING — and targeting[]).Default: "v1"

Result

Every tool answers {notification, data, human_action}; data carries:

  • 207, one result per item; an item whose code is not "Ok" (or that is listed under error / failures) failed — read its details.
  • data.failed — [{index, optimizationRuleId, code, details}] for every item Amazon did not confirm. ALWAYS relay this verbatim.
  • data.result.responses — per rule, optimizationRule.optimizationRuleId — pass it to ads_associate_optimization_rules_to_campaign.

Body (Amazon schema; application/vnd.spoptimizationrules.v1+json): {optimizationRules

[OptimizationRulesAPISwaggerOptimizationRuleWithoutRuleId]} (exactly 1), each item:
  action*: {actionDetails*: {actionOperator*, actionUnit*, value*}, actionType*: ADOPT}
action.actionDetails.actionOperator: INCREMENT
action.actionDetails.actionUnit: PERCENT
conditions: [{attributeName: ROAS, criteria: {maxValue*, minValue*} | {comparisonOperator*, value*}}] (max 1)
conditions.criteria.comparisonOperator: EQUAL_TO | GREATER_THAN | GREATER_THAN_OR_EQUAL_TO | LESS_THAN | LESS_THAN_OR_EQUAL_TO
recurrence*: {daysOfWeek, duration*: {endTime, eventId, eventName, startTime}, timesOfDay: [{endTime*, startTime*}] (max 1), type*: DAILY | WEEKLY}
recurrence.daysOfWeek: [FRIDAY | MONDAY | SATURDAY | SUNDAY | THURSDAY | TUESDAY | WEDNESDAY]
ruleCategory*: BID
ruleName: string
ruleSubCategory*: SCHEDULE
status: ENABLED | ENDED | PAUSED | SCHEDULED

Gotchas

  • Rules only ever INCREMENT by a PERCENT — there is no decrease action.
  • Changes take up to 24 HOURS to take effect. Max 20 schedule rules per campaign.
  • Rules active together STACK ADDITIVELY (a 10% daily + 20% event rule = +30%), on top of placement adjustments and bidding strategies.
  • The response echoes status 'SCHEDULED' even when you sent 'ENABLED' — that is normal, not a failure.
  • ruleCategory BID pins ruleSubCategory to SCHEDULE; ruleCategory TARGETING pins it to PERFORMANCE — any other pairing 400s, so a performance condition only ever adjusts TARGETING, never a plain BID rule. BUDGET appears in the spec's ruleCategory enum but Amazon rejects it — budget automation lives in ads_create_budget_rules_for_campaigns.
  • A TARGETING/PERFORMANCE rule must NOT carry recurrence (Amazon rejects it — the start time is the creation time) and MUST carry targeting[]. ACOS is in the spec's condition attributeName enum but Amazon rejects it here — for ACOS-gated automation use ads_create_budget_rules_for_campaigns instead (it acts on budget, not bids).
  • Mutually exclusive with ads_create_optimization_rule (the DIFFERENT campaign-optimization / rule-based-bidding API) on the same campaign — associating this kind of rule fails "Campaign has performance based rule enabled…" if the other kind is already attached. Pick ONE automation model per campaign.

On this page

Actions

View as Markdown

Ask an assistant

Ask ChatGPTAsk Claude