# ads_sp_create_optimization_rules (https://sellersheetai.com/docs/mcp-api/tools/ads_sp_create_optimization_rules)

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

Access: **WRITE** · toolset amazon_ads · family ads.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

MCP tool call:

```json
{
  "name": "ads_sp_create_optimization_rules",
  "arguments": {
    "store": "myStore-US",
    "countryCode": "<countryCode>",
    "body": "<body>"
  }
}
```

Tool API (early access — contact us):

```bash
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>"}'
```

## Arguments

| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `<store>-<CC>` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object[] \| object | yes | one rule object, a list, or Amazon's {optimizationRules: [...]} envelope (all accepted) — v1 takes exactly ONE rule per call, v2 1–300. |
| `apiVersion` | string |  | v1 (default — BID+SCHEDULE only) \| v2 (adds PERFORMANCE rules — ruleCategory TARGETING — and targeting[]). |

## Result

- 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.