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

> Build Amazon-shaped payloads from Publish Queue cells AND submit them per SKU through the listings-items API in one call — the same input shape as listings_build_payload, then one 

Access: **DESTRUCTIVE** · toolset amazon_sp · family sp.definitionsProductTypes_2020-09-01

put, patch or delete per row by its operationType. Amazon SP-API · getDefinitionsProductType · GET /definitions/2020-09-01/productTypes/{productType} Amazon SP-API · getListingsItem · GET /listings/2021-08-01/items/{sellerId}/{sku} Amazon SP-API · putListingsItem · PUT /listings/2021-08-01/items/{sellerId}/{sku} Amazon SP-API · patchListingsItem · PATCH /listings/2021-08-01/items/{sellerId}/{sku} Amazon SP-API · deleteListingsItem · DELETE /listings/2021-08-01/items/{sellerId}/{sku} Gate: commit — interactive: restate exactly what will happen, wait for a typed CONFIRM; autopilot: only within the seller's instruction and stated limits; otherwise ask.

## Call it

MCP tool call:

```json
{
  "name": "listings_submit_items",
  "arguments": {
    "store": "myStore-US",
    "productType": "<productType>",
    "rows": []
  }
}
```

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/listings_submit_items \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"store":"myStore-US","productType":"<productType>","rows":[]}'
```

## 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. |
| `productType` | string | yes | the default for rows that carry no productType of their own — rows of several productTypes may go in one call, e.g. "HEADPHONES". |
| `rows` | object[] | yes | [{sku, operationType, productType?, attributes: {key: cell_value}}] in the flat-file key grammar of listings_build_payload. operationType: UPDATE (full replace; PUT and CREATE are legacy aliases) \| PATCH (JSON Patch on /attributes/*; PARTIAL_UPDATE is the feeds-spec alias) \| PATCH-DELETE (deletes the attributes whose cells are filled; identifier attributes are never deleted) \| DELETE. |
| `mode` | string |  | 'VALIDATION_PREVIEW' (default; a dry run that checks the SHAPE against the schema — Amazon may still refuse a value at submission, so always read issues) \| 'VALIDATION_AND_SUBMISSION' (a real put, patch or delete). A DELETE row is not sent in a preview and comes back SKIP with the reason; only VALIDATION_AND_SUBMISSION deletes the SKU. Live submission needs SP write access; a preview works at SP read. Allowed: VALIDATION_PREVIEW \| VALIDATION_AND_SUBMISSION. |
| `locale` | string |  | schema locale for localized labels; defaults to the marketplace's. Allowed: DEFAULT \| ar \| ar_AE \| de \| de_DE \| en \| en_AE \| en_AU \| en_CA \| en_GB \| en_IN \| en_SG \| en_US \| es \| es_ES \| es_MX \| es_US \| fr \| fr_CA \| fr_FR \| it \| it_IT \| ja \| ja_JP \| nl \| nl_NL \| pl \| pl_PL \| pt \| pt_BR \| pt_PT \| sv \| sv_SE \| tr \| tr_TR \| zh \| zh_CN \| zh_TW. Allowed: DEFAULT \| ar \| ar_AE \| de \| de_DE \| en \| en_AE \| en_AU \| en_CA \| en_GB \| en_IN \| en_SG \| en_US \| es \| es_ES \| es_MX \| es_US \| fr \| fr_CA \| fr_FR \| it \| it_IT \| ja \| ja_JP \| nl \| nl_NL \| pl \| pl_PL \| pt \| pt_BR \| pt_PT \| sv \| sv_SE \| tr \| tr_TR \| zh \| zh_CN \| zh_TW. |
| `issueLocale` | string |  | the locale of the returned issue messages (default 'en_US'). |
| `language_tag` | string |  | fills the language_tag token; defaults to the marketplace's primary listing locale. |

## Result

- `data.results` — [{sku, status, submissionId, issues: [{code, message, severity ERROR | WARNING | INFO}], warnings, reason, error}] — status is Amazon's ACCEPTED | VALID | INVALID, or SellerSheet's own SKIP (a pre-check; reason names it) and ERROR (the call failed; error says why). data.submitted, data.accepted, data.failed: counts.
- `data.op_counts` — {operationType: rows}.

## Params (Amazon schema; getDefinitionsProductType)

- productType*: string sellerId: string marketplaceIds*: [string] productTypeVersion: string requirements: LISTING | LISTING_PRODUCT_ONLY | LISTING_OFFER_ONLY requirementsEnforced: ENFORCED | NOT_ENFORCED locale: DEFAULT | ar | ar_AE | de | … | zh_TW (38 values) parentageLevel: NONE | CHILD | PARENT

## Params (Amazon schema; getListingsItem)

- sellerId*: string sku*: string marketplaceIds*: [string] issueLocale: string includedData: summaries | attributes | issues | offers | fulfillmentAvailability | procurement | relationships | productTypes (list)

## Params (Amazon schema; putListingsItem)

- sellerId*: string sku*: string … (16 more lines; the Docs link above)

## Body (Amazon schema; putListingsItem)

- productType*: string requirements: LISTING | LISTING_PRODUCT_ONLY | LISTING_OFFER_ONLY attributes*: object

## Body (Amazon schema; patchListingsItem)

- productType*: string patches*: [{op*: add | replace | merge | delete, path*, value: [object]}] (min 1)

## Gotchas

- A row whose cells carry a BLOCKING key — one that does not parse or names a field the row's productType schema lacks (retired_column_layout), disagrees with the store's marketplace or the sheet's language (marketplace_mismatch, language_mismatch), or fills the same attribute in both its #* cell and a #1 cell (column_collision) — comes back SKIP; every other row in the call still submits. A cell holding exactly __DELETE__ on a PATCH row deletes that attribute (JSON Patch delete); on an UPDATE row it is ignored with a warning.

## Workflow

- 1. Call with VALIDATION_PREVIEW and show the issues. 2. After the user approves and fixes, call with VALIDATION_AND_SUBMISSION. 3. Write the batch outcome to the Last Result pill (row 3, under the row-2 "Last Result" label) and each failing SKU's issues to the Submission Log.