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

> Create targets across ALL ad products via the unified Amazon Ads API v1 — keywords, product and category targets, audiences, themes and locations, and every negative (negative=true

Access: **WRITE** · toolset amazon_ads · family ads.v1

, ad-group or campaign level); there is no separate keywords entity in v1. Amazon Ads API · CreateTarget · POST /adsApi/v1/create/targets Docs: https://advertising.amazon.com/API/docs/en-us/api-spec-v1-targets#tag/Targets/operation/CreateTarget 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_create_target",
  "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_create_target \
  -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 | list of target objects (or {targets: [...]}). |

## Result

- 207 {success, partialSuccess, error}. HTTP success does not mean every item succeeded; read error[] by index.
- `data.result.success[].target` — each created target with its targetId; index is its position in your list — partialSuccess[] items were created with errors, error[] items were not.

## Gotchas

- negative=false is a biddable target; true is a negative (block) target. Set campaignId + adGroupId for an ad-group-level target; set campaignId and OMIT adGroupId for a CAMPAIGN-LEVEL target (e.g. a campaign negative keyword; SPONSORED_PRODUCTS and SPONSORED_DISPLAY only — SB, ST and DSP targets require adGroupId) — Amazon echoes targetLevel: CAMPAIGN.
- targetType by ad product: SP KEYWORD | PRODUCT | PRODUCT_CATEGORY | THEME | LOCATION; SB KEYWORD | PRODUCT | PRODUCT_CATEGORY | THEME; SD AUDIENCE | CONTENT_CATEGORY | KEYWORD | LOCATION | PRODUCT | PRODUCT_AUDIENCE | PRODUCT_CATEGORY | THEME; ST AUDIENCE | LOCATION; every other value is AMAZON_DSP's.
- A keyword target is {adProduct, campaignId, adGroupId, negative: false, state: 'ENABLED', targetType: 'KEYWORD', bid: {bid: <amount>}, targetDetails: {keywordTarget: {keyword, matchType: BROAD | EXACT | PHRASE}}} — bid wraps the number.
- An SP ad group is SINGLE-targeting-type: keyword targets and product targets cannot coexist in one ad group. Adding the second type fails with the misleading FIELD_VALUE_NOT_UNIQUE "Duplicate object found" — use separate ad groups per targeting type.
- productTarget.product is an OBJECT wrapping productId, not a bare string (a bare string 400s "Expected null").
- productCategoryTarget nests productCategoryRefinement TWICE — the outer key is the wrapper, the inner one holds the fields; a single level 400s.