ads_create_optimization_rule
Sponsored Products rule-based bidding — hand bid control to Amazon under a ROAS guardrail you declare; Amazon raises and lowers the campaign's base bids itself to increase conversi
destructiveAmazon Adsads.sp
ons while trying to hold it. This is NOT the same API as ads_sp_create_optimization_rules (which only applies fixed percentage increases on a schedule). Amazon Ads API · CreateOptimizationRule · POST /sp/rules/campaignOptimization Docs: https://advertising.amazon.com/API/docs/en-us/sponsored-products/3-0/openapi/prod#tag/Campaign-Optimization-Rules/operation/CreateOptimizationRule 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)
{
"name": "ads_create_optimization_rule",
"arguments": {
"store": "myStore-US",
"countryCode": "<countryCode>",
"body": {}
}
}From code (Tool API)
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_optimization_rule \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"<countryCode>","body":{}}'Arguments
| Name | Type | Description |
|---|---|---|
storerequired | string | the store ref `<store>-<CC>` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
countryCoderequired | string | the Ads profile's 2-letter country code (e.g. 'US'). |
bodyrequired | object | {campaignIds (max 20, fewer than eligibility's 100 — split larger sets), ruleType: BID, ruleAction: ADOPT, recurrence: DAILY, ruleCondition: [{metricName, ...}]}. Use the roas returned by ads_get_optimization_rule_eligibility as the threshold rather than inventing one. |
Result
Every tool answers {notification, data, human_action}; data carries:
- Amazon's payload in data.result.
data.result.campaignOptimizationId— the rule id that ads_get_campaign_optimization_rule, ads_update_optimization_rule and ads_delete_campaign_optimization_rule take.data.result.code / data.result.details— whether Amazon created it.
Gotchas
- ALWAYS call ads_get_optimization_rule_eligibility first — Amazon rejects ineligible campaigns.
- ruleType only supports BID today: KEYWORD and PRODUCT are in the spec enum but Amazon answers "Rule type is invalid. Only support BID as of now."
- A ROAS condition is MANDATORY — AVERAGE_BID is in the spec enum but Amazon answers "Condition on ROAS is required, and AVERAGE_BID is not allowed."
- When metricName=ROAS, Amazon only actually supports GREATER_THAN and EQUAL_TO, despite the fuller comparisonOperator enum in the spec.
- Mutually exclusive with ads_associate_optimization_rules_to_campaign on the same campaign — associating a schedule/intraday bid rule fails once this kind is attached. Pick ONE automation model and say which one you picked.