After `getFeed` returns `processingStatus: DONE`, call `getFeedDocument` with the `resultFeedDocumentId` to get a signed download URL for the report.
Fetch the report document and decompress it if the `compressionAlgorithm` field in the feed document response indicates GZIP encoding.
Parse the JSON processing report: the top-level `header` contains `messageCount` and `acceptedCount`; each item in the `messages` array has a `messageId`, `processingStatus` (ACCEPTED, INVALID, etc.), and an `issues` array.
Filter messages where `processingStatus` is not ACCEPTED; for each, inspect `issues` entries for `code`, `severity`, and `message` to determine the root cause.
Categorize failures: data errors (invalid attribute values, missing required fields) require data correction; system errors (throttling, timeout) are safe to retry without changes.
Re-submit corrected records in a new feed, mapping each corrected record back to its original SKU using the `sku` field in the message body.
Known gotchas
Processing report download URLs from `getFeedDocument` expire after a short TTL; download and store the report immediately after retrieving the URL.
A feed with `processingStatus: DONE` and zero `acceptedCount` does not return an HTTP error — the feed succeeded technically but all records failed; implement an alert on `acceptedCount == 0`.
For very large feeds, the processing report itself can be several MB; avoid loading it entirely into memory — stream and parse incrementally.
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