Call POST /feeds/2021-06-30/documents to create an upload document; the response contains an uploadDestination.url (a pre-signed S3 URL) and a feedDocumentId.
Build your JSON feed payload conforming to the JSON_LISTINGS_FEED schema — each record is a JSON Patch document keyed by SKU with a 'patches' array of attribute operations.
PUT the compressed (gzip) feed content directly to the pre-signed S3 URL with Content-Type application/octet-stream; no Authorization header is needed for this PUT.
Create the feed by calling POST /feeds/2021-06-30/feeds with body {feedType: 'JSON_LISTINGS_FEED', marketplaceIds: [...], inputFeedDocumentId: feedDocumentId}.
Poll GET /feeds/2021-06-30/feeds/{feedId} until processingStatus reaches 'DONE'; then retrieve the result document URL from the feed's resultFeedDocumentId.
Download, decompress, and parse the processing report — each record contains a 'status' ('ACCEPTED' or 'INVALID') and an 'issues' array with error codes and details for any rejected items.
Known gotchas
The pre-signed S3 upload URL expires after a short window (typically a few minutes) — generate and upload in the same workflow step; do not store the URL for later use.
The Feeds API is asynchronous and processing times vary by feed size and marketplace load — do not poll more frequently than every 30 seconds; implement exponential backoff.
XML and flat-file feed types for listings (e.g., _POST_PRODUCT_DATA_, _POST_INVENTORY_AVAILABILITY_DATA_) were deprecated and shut off on July 31, 2025 — use JSON_LISTINGS_FEED for all new integrations.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp