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

> Bulk publish through Amazon's Feeds API (JSON_LISTINGS_FEED) — the sidebar's "Submit Listing" parity, for 10+ SKUs up to ~25,000 per call; for interactive edits of ≤20 SKUs with pe

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

r-SKU feedback in the same call use listings_submit_items. Same row shape as listings_submit_items: flat cell values keyed by Amazon's flat-file key grammar. Returns a feedId at once; per-SKU issues come later in the feed result — track it with listings_poll_feed_results (feed_ids [data.feedId]) every ~30 s until terminal (DONE, FATAL or CANCELLED); it reads the feed and its report for you. Requires SP write access. Amazon SP-API · getDefinitionsProductType · GET /definitions/2020-09-01/productTypes/{productType} Amazon SP-API · createFeedDocument · POST /feeds/2021-06-30/documents Amazon SP-API · createFeed · POST /feeds/2021-06-30/feeds 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_feed",
  "arguments": {
    "store": "myStore-US",
    "rows": []
  }
}
```

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/listings_submit_feed \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"store":"myStore-US","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. |
| `rows` | object[] | yes | [{sku, operationType, productType, attributes}] — operationType UPDATE, PUT or CREATE → feed UPDATE (full replace); PATCH or PARTIAL_UPDATE → feed PARTIAL_UPDATE (the listed attributes only); PATCH-DELETE → feed PATCH (op:delete of the filled attributes); DELETE → feed DELETE. |
| `productType` | string |  | the default productType when a row omits it. |
| `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 feed's issue locale (default 'en_US'). |
| `language_tag` | string |  | fills the language_tag token; defaults to the marketplace's primary listing locale. |
| `debug` | boolean |  | true returns the built feed as data.feed_json instead of submitting — the only dry run (feeds have no preview mode). |

## Result

- `data.feedId` — track it with listings_poll_feed_results. data.feedDocumentId: the uploaded document.
- `data.encoded_rows` — how many rows made the feed. data.op_counts: {operationType as
- `data.encoded_rows.sent` — rows}.
- `data.skipped` — [{sku, reason}] — missing_required_columns, invalid_operationType, unknown_product_type / schema_unavailable, no_valid_attributes_after_build, or a BLOCKING key (retired_column_layout, marketplace_mismatch, language_mismatch, column_collision, as listings_submit_items describes). When every row is skipped no feed is created and data carries no feedId.
- `data.submissionLog` — the Submission Log row {action, result, skus, issues, feedId, rawResponse} — skus in feed message order, issues one line per skipped row.

## 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

## Body (Amazon schema; createFeedDocument)

- contentType*: string

## Body (Amazon schema; createFeed)

- feedType*: string marketplaceIds*: [string] (1–25) inputFeedDocumentId*: string feedOptions: object

## Gotchas

- A PARTIAL_UPDATE message carries productType + attributes only (no requirements, no patches); a PATCH-DELETE row becomes a PATCH message whose op:delete patches remove the filled attributes, never the identifier. A __DELETE__ cell is not honoured in a feed (warning) — delete one attribute through listings_submit_items. Messages keep the rows' order, minus data.skipped; pass data.submissionLog.skus as listings_poll_feed_results' skus {feedId: one SKU per line}, or its issues read "Message n". Verify a sample row's encoding with listings_build_payload before a large feed.