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

> Submit a feed to Amazon (createFeedDocument upload + createFeed); returns feedId at once.

Access: **DESTRUCTIVE** · toolset amazon_sp · family sp.feeds_2021-06-30

The marketplace comes from the store ref. Poll feeds_getFeed until processingStatus is DONE, FATAL or CANCELLED (FATAL/CANCELLED never becomes DONE — stop and report). 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": "feeds_createFeed",
  "arguments": {
    "store": "myStore-US",
    "feedType": "<feedType>",
    "feedData": "<feedData>",
    "contentType": "<contentType>"
  }
}
```

Tool API (early access — contact us):

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

## 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. |
| `feedType` | string | yes | Amazon's feed type string (100+ values; the exact string, see https://developer-docs.amazon.com/sp-api/docs/feed-type-values). Common: JSON_LISTINGS_FEED (listings — the XML/flat-file product feeds are deprecated), POST_INVENTORY_AVAILABILITY_DATA, POST_PRODUCT_PRICING_DATA, POST_PRODUCT_IMAGE_DATA, POST_ORDER_FULFILLMENT_DATA, POST_ORDER_ACKNOWLEDGEMENT_DATA, UPLOAD_VAT_INVOICE, POST_FBA_INBOUND_CARTON_CONTENTS, POST_EASYSHIP_DOCUMENTS. |
| `feedData` | string | yes | the feed body, base64-encoded; decoded it must match feedType and contentType (JSON for JSON_LISTINGS_FEED, XML for POST_* feeds, PDF bytes for UPLOAD_VAT_INVOICE). A JSON_LISTINGS_FEED body is {header, messages}: header = {sellerId (the store's seller id from get_user_context), version "2.0", issueLocale, report: {includedData: ["issues", …], apiVersion "2021-08-01"}} — always include "issues" so feeds_getFeed carries per-SKU issues; add "relationships" when touching a variation group. Each message = {messageId (unique int), sku, operationType, …} with ONE of four shapes: UPDATE → productType + attributes (the full set; optional requirements LISTING \| LISTING_PRODUCT_ONLY \| LISTING_OFFER_ONLY) — creates or fully republishes a listing; PARTIAL_UPDATE → productType + attributes (only those sent are merged; no patches); PATCH → productType + patches (JSON-Patch op replace\|merge\|delete on /attributes/<name>; no attributes); DELETE → sku only. attributes and patches are never interchangeable (a PARTIAL_UPDATE with patches 400s). Attribute values have exactly the shape listings_getListingsItem returns (e.g. item_thickness → [{decimal_value: 3.6, unit: "millimeters", marketplace_id}]): read the current ones with listings_getListingsItem(included_data=['attributes', 'productTypes']), model a new ASIN from catalogItems_getCatalogItem, or validate against productTypeDefinitions_getDefinitionsProductType. |
| `contentType` | string | yes | MIME type of feedData: 'application/json; charset=UTF-8' (JSON_LISTINGS_FEED), 'text/xml; charset=UTF-8' (XML feeds), 'application/pdf' (UPLOAD_VAT_INVOICE). |
| `feedOptions` | object |  | feed-specific metadata; for UPLOAD_VAT_INVOICE {'metadata:orderid': '<amazonOrderId>', 'metadata:invoicenumber': '<invoiceNumber>'}. |

## Result

- `data.feedId` — poll it with feeds_getFeed.
- `data.feedDocumentId` — the uploaded document.
- `data.processingStatus` — always 'IN_QUEUE' here — Amazon's createFeed carries only feedId.
- `data.feedType` — as submitted.

## Body (Amazon schema; createFeedDocument)

- contentType*: string

## Body (Amazon schema; createFeed)

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

## Gotchas

- A seller with a GTIN exemption can get a NEW ASIN spun off even on a PARTIAL_UPDATE: always send externally_assigned_product_identifier [{type: "asin", value: <the ASIN>, marketplace_id}] to keep the SKU bound to its ASIN (Amazon accepts type "asin" although the schema lists ean|gtin|upc). For Publish Queue rows use listings_submit_feed (it builds this feed from the sheet's keys).