22 Agent Skills for Amazon sellers and advertisers: Sponsored Products and Brands audits, search-term mining, budget pacing, DSP and Amazon Marketing Cloud, reporting, listing optimization and compliance, product images, repricing, FBA inbound, stockout, refunds, buyer messaging, and profitability. Built for Kuudo's hosted Amazon Ads and Selling Partner MCP servers; price, budget, listing, and shipment writes are previewed and wait for explicit approval.
68
93%
Does it follow best practices?
Impact
66%
1.65xAverage score across 22 eval scenarios
Medium
Suggest reviewing before use
These are the bodies for every Fulfillment Inbound v2024-03-20 write.
They are taken from the v2024-03-20 OpenAPI model. On code-mode SP-API servers,
body fields are flattened into top-level tool arguments next to the path
parameters. For example, createInboundPlan takes
{destinationMarketplaces, items, sourceAddress, name} directly, not
{body: {...}}.
Nested keys are not case-normalized, so copy them exactly. get_schema
wins if it disagrees with this file about a key or shape. Every write here
still goes through its gate in SKILL.md section 4.
Contents:
// AddressInput. Required: name, phoneNumber, addressLine1, city, postalCode, countryCode
{"name": "…", "companyName": "…", "addressLine1": "…", "addressLine2": "…",
"city": "…", "stateOrProvinceCode": "WA", "postalCode": "…",
"countryCode": "US", "phoneNumber": "…", "email": "…"}
// ItemInput. Required: msku, quantity, prepOwner, labelOwner
{"msku": "SKU-001", "quantity": 100, "prepOwner": "SELLER", "labelOwner": "SELLER",
"expiration": "2027-06-30", "manufacturingLotCode": "…"}
// prepOwner / labelOwner: AMAZON | SELLER | NONE. The US no longer accepts AMAZON (since 2026-01-01).
// One MSKU with different expiration dates cannot share a plan.
// Dimensions: {"length": 12, "width": 10, "height": 8, "unitOfMeasurement": "IN"} // IN | CM
// Weight: {"value": 18.5, "unit": "LB"} // LB | KG
// Currency: {"amount": 1250.00, "code": "USD"}
// ContactInformation. Required: name, phoneNumber. Optional: email.Use ISO 8601 datetimes with minute precision, for example
2026-10-03T09:00Z. Seconds are dropped.
createInboundPlan
{"destinationMarketplaces": ["ATVPDKIKX0DER"],
"sourceAddress": {"…AddressInput…"},
"items": [{"msku": "SKU-001", "quantity": 100, "prepOwner": "SELLER", "labelOwner": "SELLER"}],
"name": "optional plan name"}{inboundPlanId, operationId}.destinationMarketplaces accepts exactly one marketplace today.These operations need only the path parameter inboundPlanId:
generatePackingOptionslistPackingOptionslistPackingGroupItems takes inboundPlanId and packingGroupId.
confirmPackingOption takes inboundPlanId and packingOptionId.
setPackingInformation
{"inboundPlanId": "wf…",
"packageGroupings": [
{"packingGroupId": "pg…",
"boxes": [
{"contentInformationSource": "BOX_CONTENT_PROVIDED",
"quantity": 3,
"dimensions": {"length": 18, "width": 14, "height": 12, "unitOfMeasurement": "IN"},
"weight": {"value": 22, "unit": "LB"},
"items": [{"msku": "SKU-001", "quantity": 20, "prepOwner": "SELLER", "labelOwner": "SELLER"}]}
]}
]}quantity on a box means that many identical boxes, each holding the
items listed.packingGroupId or shipmentId:
packingGroupId before placement is confirmed. It must belong to
the confirmed packing option. This is the pack-first flow.shipmentId after placement is confirmed. This is the Pack Later
flow.contentInformationSource takes one of three values:
BOX_CONTENT_PROVIDEDBARCODE_2D: items must be empty.MANUAL_PROCESS: items must be empty. Amazon charges a manual
processing fee, so any request that includes it is a hard gate
(typed CONFIRM; see SKILL.md section 4).generatePlacementOptions: {"inboundPlanId": "wf…"}. The optional
customPlacement is for India only; see below.
listPlacementOptions returns placementOptions[], each with:
placementOptionIdshipmentIds[]fees[] and discounts[], as Incentive objects:
{type FEE|DISCOUNT, target, description, value: Currency}status: OFFERED, ACCEPTED, or EXPIREDexpirationThe net placement fee is the sum of fees[].value.amount minus the sum of
discounts[].value.amount, in value.code.
confirmPlacementOption: path parameters inboundPlanId and
placementOptionId. This is a hard gate.
generateTransportationOptions
{"inboundPlanId": "wf…",
"placementOptionId": "pl…",
"shipmentTransportationConfigurations": [
{"shipmentId": "sh…",
"readyToShipWindow": {"start": "2026-10-03T09:00Z"},
"contactInformation": {"name": "…", "phoneNumber": "…", "email": "…"},
"freightInformation": {"declaredValue": {"amount": 4000, "code": "USD"}, "freightClass": "FC_125"},
"pallets": [{"quantity": 2, "stackability": "STACKABLE",
"dimensions": {"length": 48, "width": 40, "height": 50, "unitOfMeasurement": "IN"},
"weight": {"value": 600, "unit": "LB"}}]}
]}readyToShipWindow.start and shipmentId are required.contactInformation is needed for partnered LTL/FTL.pallets and freightInformation are needed to get any pallet (LTL/FTL)
quote.sourceAddress;
change it with updateShipmentSourceAddress.listTransportationOptions takes the query parameters inboundPlanId plus
placementOptionId and/or shipmentId. Page size is at most 20. Follow
pagination.nextToken until it is empty. Each option carries:
transportationOptionIdshipmentIdcarrier{name, alphaCode}shippingModeshippingSolutionquote{cost, expiration, voidableUntil}preconditions[]confirmTransportationOptions
{"inboundPlanId": "wf…",
"transportationSelections": [
{"shipmentId": "sh…", "transportationOptionId": "to…",
"contactInformation": {"name": "…", "phoneNumber": "…"}}
]}Send one selection per shipment, all in one call. Each plan gets one
transportation confirmation; after it succeeds, no new transportation options
can be generated or confirmed. contactInformation is required for partnered
LTL/FTL.
generateDeliveryWindowOptions: path parameters inboundPlanId and
shipmentId, no body.listDeliveryWindowOptions returns deliveryWindowOptions[] with:
deliveryWindowOptionIdstartDate and endDateavailabilityType: AVAILABLE, BLOCKED, CONGESTED, or DISCOUNTEDvalidUntilconfirmDeliveryWindowOptions: path parameters inboundPlanId,
shipmentId, and deliveryWindowOptionId. Placement must be confirmed
first.updateShipmentTrackingDetails (your own carrier only):
// Small parcel. One entry per box; boxId comes from listShipmentBoxes.
{"inboundPlanId": "wf…", "shipmentId": "sh…",
"trackingDetails": {"spdTrackingDetail": {"spdTrackingItems": [{"boxId": "FBA…U000001", "trackingId": "1Z…"}]}}}
// LTL/FTL. freightBillNumber is an array of exactly one PRO number; BOL is optional.
{"inboundPlanId": "wf…", "shipmentId": "sh…",
"trackingDetails": {"ltlTrackingDetail": {"freightBillNumber": ["PRO123456"], "billOfLadingNumber": "BOL…"}}}createMarketplaceItemLabels (FNSKU item labels):
{"marketplaceId": "ATVPDKIKX0DER", "labelType": "STANDARD_FORMAT",
"mskuQuantities": [{"msku": "SKU-001", "quantity": 100}],
"pageType": "Letter_30", "localeCode": "en_US"}labelType is STANDARD_FORMAT or THERMAL_PRINTING. Thermal needs
width and height.pageType takes one of:
A4_21, A4_24, A4_24_64x33, A4_24_66x35, A4_24_70x36,
A4_24_70x37, A4_24i, A4_27, A4_40_52x29, A4_44_48x25Letter_30documentDownloads[] with a download URL and an expiration.v0 getLabels (box and pallet labels) takes query parameters in PascalCase:
{"shipmentId": "FBA1234ABCD", "PageType": "PackageLabel_Plain_Paper", "LabelType": "UNIQUE",
"NumberOfPackages": 6}shipmentId here is the shipmentConfirmationId.LabelType is UNIQUE (per box), BARCODE_2D, or PALLET. For pallet
labels, add NumberOfPallets.PageType takes one of:
PackageLabel_Letter_2, _Letter_4, _Letter_6,
_Letter_6_CarrierLeftPackageLabel_A4_2, _A4_4PackageLabel_Plain_Paper, _Plain_Paper_CarrierBottomPackageLabel_Thermal, _Thermal_Unified, _Thermal_NonPCP,
_Thermal_No_Carrier_RotationDownloadURL.v0 getBillOfLading takes {"shipmentId": "<shipmentConfirmationId>"}.
Use it for partnered pallet shipments after transportation is confirmed.
listPrepDetails takes the query parameters marketplaceId and mskus[].
It returns each MSKU's:
prepCategory and prepTypesprepOwnerConstraint and labelOwnerConstraintallOwnersConstraintIt does not reflect prep that was set in Seller Central.
setPrepDetails sets prep category and types, not owners. Owners go on
each item in createInboundPlan. Send at most 100 MSKUs per call.
{"marketplaceId": "ATVPDKIKX0DER",
"mskuPrepDetails": [{"msku": "SKU-001", "prepCategory": "NONE", "prepTypes": ["ITEM_NO_PREP"]}]}| Operation | Body |
|---|---|
updateInboundPlanName | {"name": "…"} |
updateShipmentName | {"name": "…"} |
updateShipmentSourceAddress | {"address": AddressInput}. Only before carriers are confirmed; invalidates transportation options |
cancelInboundPlan | Path parameter inboundPlanId only. Hard gate |
generateShipmentContentUpdatePreviews | {"boxes": [BoxUpdateInput…], "items": [{"msku", "quantity", …}]}. The full new box set: each BoxUpdateInput is BoxInput plus an optional packageId for an existing box |
generateShipmentContentUpdatePreviews works only before the shipment
reaches RECEIVING.
generatePlacementOptions takes {"customPlacement": [{"warehouseId": "…", "items": [ItemInput…]}]}. This is optional.listItemComplianceDetails takes the query parameters mskus[] and
marketplaceId.updateItemComplianceDetails takes the query parameter marketplaceId
and the body {"msku": "…", "taxDetails": {"declaredValue": Currency, "hsnCode": "…", "taxRates": [{"gstRate", "cessRate", "taxType"}]}}. It
handles one MSKU per call and is async.generateSelfShipAppointmentSlots takes
{"desiredStartDate": "…", "desiredEndDate": "…"}. Both fields are
optional; the default window is the next 42 days.scheduleSelfShipAppointment takes path parameter slotId and an
optional reasonComment. The docs require a reason when you reschedule.cancelSelfShipAppointment takes an optional reasonComment, one of:
APPOINTMENT_REQUESTED_BY_MISTAKEVEHICLE_DELAYSLOT_NOT_SUITABLEOUTSIDE_CARRIER_BUSINESS_HOURSUNFAVOURABLE_EXTERNAL_CONDITIONSPROCUREMENT_DELAYSHIPPING_PLAN_CHANGEDINCREASED_QUANTITYOTHER.tessl-plugin
skills
amazon-ads-accounts
amazon-ads-budget-pacing
amazon-ads-create-dsp-campaign
amazon-ads-creative-assets
amazon-ads-marketing-cloud
amazon-ads-reporting
assets
templates
sb
references
tests
amazon-ads-sb-performance-review
amazon-ads-sp-campaign-auditor
amazon-ads-sp-search-term-explorer
amazon-product-image
amazon-profitability-calculator
amazon-sp-fba-inbound
amazon-sp-listing-compliance
amazon-sp-listing-optimizer
amazon-sp-messaging-api
amazon-sp-refund-return-monitor
amazon-sp-repricing
amazon-sp-sales-traffic-analyzer
amazon-sp-sqp-asin-ngram
amazon-sp-stockout-prevention
connect-to-kuudo
using-kuudo