Prefix any standard synchronous REST endpoint with `/async/V1/` for single async calls, or `/async/bulk/V1/` for batch operations; for example, bulk product upsert becomes `PUT /<store_code>/async/bulk/V1/products`.
Send an array of objects in the request body; the bulk endpoint splits the array into individual messages and writes each to the message queue, returning a `bulk_uuid` and array of `request_items`.
Ensure RabbitMQ (or an alternative message broker) is installed and configured; start the async consumer with `bin/magento queue:consumers:start async.operations.all`.
Poll operation status via `GET /V1/bulk/{bulk_uuid}/status` for a summary, or `GET /V1/bulk/{bulk_uuid}/operation-status/{status}` to count operations in a specific state (e.g., 4 = complete, 2 = failed).
For failed operations, retrieve error details from the operation status response and re-submit corrected records as a new bulk request.
Scope bulk requests to a specific store view by including the store code in the route (e.g., `PUT /en_US/async/bulk/V1/products`) to avoid updating the default scope unintentionally.
Known gotchas
Bulk endpoints require RabbitMQ to be running; if the message queue consumer is not started, messages accumulate indefinitely without processing and no errors are returned at submission time.
The bulk API is all-or-nothing per individual message, not per batch — a single malformed item fails silently and shows up only in the operation status endpoint, not as a request-level error.
Store view code scoping in the async bulk route is separate from the Authorization header; passing the wrong store code can silently apply updates to the wrong store.
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