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

> Legacy Create Listing flow: submit flat Create Listing rows via JSON_LISTINGS_FEED or the Listings Items API — new work uses listings_submit_feed (Publish Queue keys).

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

Amazon SP-API · getDefinitionsProductType · GET /definitions/2020-09-01/productTypes/{productType} 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} 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. Accepts flat {header: value} rows — same format as the Create Listing sheet. The server encodes attributes. PATCH-delete rows always use Listings Items API.

## Call it

MCP tool call:

```json
{
  "name": "listings_submit_feed_legacy",
  "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_legacy \
  -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 | 2D array [[headers], [row1], ...] or list of {header: value} dicts. |
| `config` | object |  | Dict from sheet rows 1-2 (keys as in listings_validate_rows); omitted → asin / centimeters / kilograms / liters / count / en_US, so pass it on any non-US store. marketplace_id comes from the store. |
| `mode` | string |  | 'feed' (bulk JSON_LISTINGS_FEED, default) or '1by1' (Listings Items API per row). |
| `debug` | boolean |  | true returns the built feed as data.feed_json (with data.encode_errors, data.patch_results) without submitting (feed mode only). |

## Result

- `data.feedId` — (feed mode) poll with listings_poll_feed_results.
- `data.submitted / data.failed` — (1by1 mode) counts.
- `data.submissionLog` — the Submission Log cells for this feed (Action, Result, SKUs in message order, Issues, Feed ID, Raw Response) — append them with write_sheet when the user keeps that tab.
- `data.feedDocumentId` — (feed mode) feed document ID.
- `data.rowCount` — (feed mode) rows actually written into the feed — LOWER than the rows you sent when some were excluded.
- `data.results` — (1by1 mode) per-SKU status list.
- `data.encode_errors` — {sku: {field: reason}} for rows that did NOT reach Amazon. A row in the split layout ('attr#n.sub' headers) is refused whole — it is not in the feed and not in rowCount, so fix it and resubmit (listings_build_payload + listings_submit_items for split rows). Other entries are per-attribute encode failures on rows that DID go.
- `data.patch_results` — [{sku, status, issues}] for PATCH-delete rows, which always go via Listings Items PATCH rather than the feed.

## 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; putListingsItem)

- sellerId*: string sku*: string marketplaceIds*: [string] (max 1) includedData: identifiers | issues (list) mode: VALIDATION_PREVIEW issueLocale: string

## Params (Amazon schema; patchListingsItem)

- sellerId*: string sku*: string … (9 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)

## Body (Amazon schema; createFeedDocument)

- contentType*: string

## Body (Amazon schema; createFeed)

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

## Workflow

- 1. read_sheet the Create Listing tab — config in rows 1–2, then the header row and data rows. 2. listings_validate_rows — fix all INVALID rows first. 3. Call this tool with the validated rows. 4. listings_poll_feed_results with data.feedId (and the row's SKUs) for per-SKU results.