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

> Sponsored Products: suggested bid amounts for keywords or targeting expressions, for an existing ad group or a new one.

Access: **READ** · toolset amazon_ads · family ads.sp

Use before creating or updating keywords/targets to set competitive bids. Amazon Ads API · GetThemeBasedBidRecommendationForAdGroup_v1 · POST /sp/targets/bid/recommendations Docs: https://advertising.amazon.com/API/docs/en-us/sponsored-products/3-0/openapi/prod#tag/Theme-based-bid-recommendations/operation/GetThemeBasedBidRecommendationForAdGroup_v1

## Call it

MCP tool call:

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

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_theme_based_bid_recommendation_for_ad_group_v1 \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"store":"myStore-US","countryCode":"<countryCode>","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 | yes | pick the shape that matches your case: - Auto targeting on an EXISTING ad group: targetingExpressions [{"type": "CLOSE_MATCH"\|"LOOSE_MATCH"\|"SUBSTITUTES"\| "COMPLEMENTS"}], campaignId, adGroupId, recommendationType: "BIDS_FOR_EXISTING_AD_GROUP". - Keyword/PAT targeting for a NEW ad group: asins, targetingExpressions, bidding.strategy, recommendationType: "BIDS_FOR_NEW_AD_GROUP". |

## Result

- Amazon's payload in data.result.

## Body (Amazon schema; application/vnd.spthemebasedbidrecommendation.v3+json), one of

- AdGroupThemeBasedBidRecommendationRequest adGroupId*: string campaignId*: string recommendationType*: BIDS_FOR_EXISTING_AD_GROUP targetingExpressions*: [{type*, value}] (max 100) (max 100 per request, use pagination for more if needed) targetingExpressions.type: CLOSE_MATCH | COMPLEMENTS | KEYWORD_BROAD_MATCH | KEYWORD_EXACT_MATCH | KEYWORD_PHRASE_MATCH | LOOSE_MATCH | SUBSTITUTES AsinsThemeBasedBidRecommendationRequest asins*: [string] (max 50) bidding*: {adjustments: [{percentage, predicate}] (max 3), strategy*} bidding.adjustments.predicate: PLACEMENT_PRODUCT_PAGE | PLACEMENT_REST_OF_SEARCH | PLACEMENT_TOP bidding.strategy: AUTO_FOR_SALES | LEGACY_FOR_SALES | MANUAL | RULE_BASED recommendationType*: BIDS_FOR_NEW_AD_GROUP targetingExpressions*: [{type*, value}] (max 100) (max 100 per request, use pagination for more if needed) targetingExpressions.type: CLOSE_MATCH | COMPLEMENTS | KEYWORD_BROAD_MATCH | KEYWORD_EXACT_MATCH | KEYWORD_PHRASE_MATCH | LOOSE_MATCH | SUBSTITUTES

## Gotchas

- The AUTO types (CLOSE_MATCH/LOOSE_MATCH/SUBSTITUTES/ COMPLEMENTS) and the KEYWORD_* types are TYPE-ONLY — do NOT add a `value` with keyword text (that is only required by the separate ads_get_ranked_keyword_recommendation endpoint). The PAT_* types are the exception: each takes a `value` (target ASIN, category id, or category refinement id).
- The response keys each suggested bid back to the expression's `value` when it has one, else to its `type`.