Read and mutate SP, SB, and SD campaigns, ad groups, ads, targeting, and budget rules.
npx skills add https://github.com/nexscope-ai/nexscope-ecommerce-skills --skill ecommerce.amazon-ads-manager
Read and mutate SP, SB, and SD campaigns, ad groups, ads, targeting, and budget rules.
The package preserves 61 Amazon-platform operations (18 read or connection operations and 43 mutations). It uses only NEXSCOPE_PROXY_BASE and NEXSCOPE_API_KEY. Provider credentials, refresh, request signing, authorization state, upload locations, and document locations remain on the backend.
/list requests, place filters in the request body. campaignIdFilter and stateFilter use an object with a non-empty include array of strings, not a bare array or queryString.The concise index below is generated from the same contract consumed by the runtime. See references/api.md for full request, validation, pagination, result, status, and example details, and references/api.json for the machine-readable contract.
sb.create_ad_groups - Create Ad GroupsPOST /sb/v4/adGroups; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.create_ads - Create AdsPOST /sb/v4/ads/{adType}; access: write; execution: generic.connectionId, adType, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.create_budget_rules - Create Budget RulesPOST /sb/budgetRules; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.create_campaigns - Create CampaignsPOST /sb/v4/campaigns; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.list_ad_groups - List Ad GroupsPOST /sb/v4/adGroups/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nameFilter, nextToken, queryString, requestId, stateFilter.- Query: None; body: adGroupIdFilter, campaignIdFilter, maxResults, nameFilter, nextToken, stateFilter.none.sb.list_ads - List AdsPOST /sb/v4/ads/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, adIdFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId, stateFilter.- Query: None; body: adGroupIdFilter, adIdFilter, campaignIdFilter, maxResults, nextToken, stateFilter.none.sb.list_budget_rules - List Budget RulesGET /sb/budgetRules; access: read; execution: generic.connectionId.- Optional: workspaceId, fetchAll, maxPages, nextToken, queryString, requestId.- Query: nextToken; body: None.none.sb.list_campaigns - List CampaignsPOST /sb/v4/campaigns/list; access: read; execution: generic.connectionId.- Optional: workspaceId, campaignIdFilter, fetchAll, maxPages, maxResults, nameFilter, nextToken, portfolioIdFilter, queryString, requestId, stateFilter.- Query: None; body: campaignIdFilter, maxResults, nameFilter, nextToken, portfolioIdFilter, stateFilter.none.sb.update_ad_groups - Update Ad GroupsPUT /sb/v4/adGroups; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.update_ads - Update AdsPUT /sb/v4/ads; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.update_budget_rules - Update Budget RulesPUT /sb/budgetRules; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sb.update_campaigns - Update CampaignsPUT /sb/v4/campaigns; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_ad_groups - Create Ad GroupsPOST /sd/adGroups; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_budget_rules - Create Budget RulesPOST /sd/budgetRules; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_campaigns - Create CampaignsPOST /sd/campaigns; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_creatives - Create CreativesPOST /sd/creatives; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_negative_targets - Create Negative TargetsPOST /sd/negativeTargets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_product_ads - Create Product AdsPOST /sd/productAds; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.create_targets - Create TargetsPOST /sd/targets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.list_ad_groups - List Ad GroupsGET /sd/adGroups; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nameFilter, nextToken, queryString, requestId, stateFilter.- Query: adGroupIdFilter, campaignIdFilter, maxResults, nameFilter, nextToken, stateFilter; body: None.none.sd.list_budget_rules - List Budget RulesGET /sd/budgetRules; access: read; execution: generic.connectionId.- Optional: workspaceId, fetchAll, maxPages, nextToken, queryString, requestId.- Query: nextToken; body: None.none.sd.list_campaigns - List CampaignsGET /sd/campaigns; access: read; execution: generic.connectionId.- Optional: workspaceId, campaignIdFilter, fetchAll, maxPages, maxResults, nameFilter, nextToken, portfolioIdFilter, queryString, requestId, stateFilter.- Query: campaignIdFilter, maxResults, nameFilter, nextToken, portfolioIdFilter, stateFilter; body: None.none.sd.list_creatives - List CreativesGET /sd/creatives; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, creativeIdFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId.- Query: adGroupIdFilter, creativeIdFilter, maxResults, nextToken; body: None.none.sd.list_negative_targets - List Negative TargetsGET /sd/negativeTargets; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId, stateFilter.- Query: adGroupIdFilter, campaignIdFilter, maxResults, nextToken, stateFilter; body: None.none.sd.list_product_ads - List Product AdsGET /sd/productAds; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, adIdFilter, asinFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId, skuFilter, stateFilter.- Query: adGroupIdFilter, adIdFilter, campaignIdFilter, maxResults, nextToken, stateFilter; body: None.none.sd.list_targets - List TargetsGET /sd/targets; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId, stateFilter, targetIdFilter.- Query: adGroupIdFilter, campaignIdFilter, maxResults, nextToken, stateFilter, targetIdFilter; body: None.none.sd.update_ad_groups - Update Ad GroupsPUT /sd/adGroups; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.update_budget_rules - Update Budget RulesPUT /sd/budgetRules; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.update_campaigns - Update CampaignsPUT /sd/campaigns; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.update_creatives - Update CreativesPUT /sd/creatives; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.update_negative_targets - Update Negative TargetsPUT /sd/negativeTargets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.update_product_ads - Update Product AdsPUT /sd/productAds; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sd.update_targets - Update TargetsPUT /sd/targets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_ad_groups - Create Ad GroupsPOST /sp/adGroups; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_budget_rules - Create Budget RulesPOST /sp/budgetRules; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_budget_rules_association - Create Budget Rules AssociationPOST /sp/budgetRulesAssociation; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_campaign_negative_keywords - Create Campaign Negative KeywordsPOST /sp/campaignNegativeKeywords; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_campaign_negative_targets - Create Campaign Negative TargetsPOST /sp/campaignNegativeTargets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_campaigns - Create CampaignsPOST /sp/campaigns; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_keywords - Create KeywordsPOST /sp/keywords; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_negative_keywords - Create Negative KeywordsPOST /sp/negativeKeywords; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_negative_targets - Create Negative TargetsPOST /sp/negativeTargets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_product_ads - Create Product AdsPOST /sp/productAds; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.create_targets - Create TargetsPOST /sp/targets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.list_ad_groups - List Ad GroupsPOST /sp/adGroups/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, campaignTargetingTypeFilter, fetchAll, maxPages, maxResults, nameFilter, nextToken, queryString, requestId, stateFilter.- Query: None; body: adGroupIdFilter, campaignIdFilter, campaignTargetingTypeFilter, maxResults, nameFilter, nextToken, stateFilter.none.sp.list_budget_rules - List Budget RulesGET /sp/budgetRules; access: read; execution: generic.connectionId.- Optional: workspaceId, fetchAll, maxPages, nextToken, queryString, requestId.- Query: nextToken; body: None.none.sp.list_campaigns - List CampaignsPOST /sp/campaigns/list; access: read; execution: generic.connectionId.- Optional: workspaceId, campaignIdFilter, fetchAll, maxPages, maxResults, nameFilter, nextToken, portfolioIdFilter, queryString, requestId, stateFilter.- Query: None; body: campaignIdFilter, maxResults, nameFilter, nextToken, portfolioIdFilter, stateFilter.none.sp.list_keywords - List KeywordsPOST /sp/keywords/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, fetchAll, keywordIdFilter, keywordTextFilter, matchTypeFilter, maxPages, maxResults, nextToken, queryString, requestId, stateFilter.- Query: None; body: adGroupIdFilter, campaignIdFilter, keywordIdFilter, keywordTextFilter, matchTypeFilter, maxResults, nextToken, stateFilter.none.sp.list_negative_keywords - List Negative KeywordsPOST /sp/negativeKeywords/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, fetchAll, keywordTextFilter, matchTypeFilter, maxPages, maxResults, negativeKeywordIdFilter, nextToken, queryString, requestId, stateFilter.- Query: None; body: adGroupIdFilter, campaignIdFilter, keywordTextFilter, matchTypeFilter, maxResults, negativeKeywordIdFilter, nextToken, stateFilter.none.sp.list_product_ads - List Product AdsPOST /sp/productAds/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, adIdFilter, asinFilter, campaignIdFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId, skuFilter, stateFilter.- Query: None; body: adGroupIdFilter, adIdFilter, asinFilter, campaignIdFilter, maxResults, nextToken, skuFilter, stateFilter.none.sp.list_targets - List TargetsPOST /sp/targets/list; access: read; execution: generic.connectionId.- Optional: workspaceId, adGroupIdFilter, campaignIdFilter, expressionTypeFilter, fetchAll, maxPages, maxResults, nextToken, queryString, requestId, stateFilter, targetIdFilter.- Query: None; body: adGroupIdFilter, campaignIdFilter, expressionTypeFilter, maxResults, nextToken, stateFilter, targetIdFilter.none.sp.update_ad_groups - Update Ad GroupsPUT /sp/adGroups; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_budget_rules - Update Budget RulesPUT /sp/budgetRules; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_campaign_negative_keywords - Update Campaign Negative KeywordsPUT /sp/campaignNegativeKeywords; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_campaign_negative_targets - Update Campaign Negative TargetsPUT /sp/campaignNegativeTargets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_campaigns - Update CampaignsPUT /sp/campaigns; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_keywords - Update KeywordsPUT /sp/keywords; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_negative_keywords - Update Negative KeywordsPUT /sp/negativeKeywords; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_negative_targets - Update Negative TargetsPUT /sp/negativeTargets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_product_ads - Update Product AdsPUT /sp/productAds; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.sp.update_targets - Update TargetsPUT /sp/targets; access: write; execution: generic.connectionId, payload.- Optional: workspaceId, queryString, requestId.- Query: None; body: payload.none.Ask for an owned connectionId, the intended account, marketplace, and region. workspaceId is optional: omit it when the API key is already bound to the workspace. Select an exact callable operation from references/api.json; do not invent paths or use a removed compatibility row. Run the relevant script from: scripts/amazon_api.py.
Reads may follow a continuation token only when fetchAll is true and always stop at maxPages. Paginated reads expose stable execution metadata: success, pagesFetched, truncated, and total when the list field is known. Client-side ASIN/SKU filters additionally report serverTotalBeforeClientFilter and clientSideFilters.
Ads entity mutations require preview, exact user approval, and a separate one-use confirmation. In the aggregate package, authorization remains a dedicated connection-lifecycle action rather than an entity mutation.
Ads requests use an owned Ads connection and the allowlisted Sponsored Products, Sponsored Brands, Sponsored Display, or reporting families. Report downloads use opaque backend tokens and optional safe outputFile publication.
NEXSCOPE_PROXY_BASE to the approved gateway base and NEXSCOPE_API_KEY to the caller credential.workspaceId override) and an owned connectionId to select the account. Do not ask for Ads access tokens, refresh tokens, OAuth client credentials, or signing secrets.For the public Skill API, use {"connectionId":7,"operationId":"sp.list_campaigns","payload":{"campaignIdFilter":{"include":["123456789"]},"maxResults":10}}. To filter by state, use "stateFilter":{"include":["ENABLED"]} in payload. The script accepts the same filter objects as top-level operation inputs or within payload.
python scripts/amazon_api.py '{"operation":"sb.list_ad_groups","workspaceId":"user:42","connectionId":7}'
python scripts/amazon_api.py '{"operation":"sb.create_ad_groups","workspaceId":"user:42","connectionId":7,"payload":{"adGroups":[{"state":"PAUSED","adGroupId":"2001","campaignId":"1001","name":"Example ad group","defaultBid":0.5}]},"phase":"preview"}'
Examples use placeholders. An Ads entity write preview is not approval; confirmation must be a separate command after the user accepts the exact preview.
pagesFetched, total when known, truncated, and the continuation token only when another bounded call is required.outputFile, byte count, content type, and decode/compression metadata when returned; never expose a provider download location.Retry-After; do not hardcode a universal requests-per-second value.references/api.md; this package intentionally contains no direct external host URL.| Classification | Guidance |
|---|---|
| Applicable | Read or change SP, SB, or SD campaign entities |
| Not applicable | Seller Central operations or report configuration discovery |
When the request crosses package boundaries, use the aggregate package only if its catalog contains the exact operation; otherwise choose the narrower package.
Do not request, print, cache, or store provider credentials. Treat advertising account, campaign, targeting, metric, and report data as private. Scripts exit nonzero for HTTP, application, upstream, invalid JSON, and malformed response failures. See references/testing.md for executable prompts, expected routes, error cases, and evidence.
Set the NEXSCOPE_API_KEY environment variable. If credentials are missing or expire, visit https://www.nexscope.ai/help/skills-external-access?co-from=skillNS to top up credits.
Take nexscope-ai/ecommerce.amazon-ads-manager from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.