Invoke the async OData action with a Prefer: respond-async header to instruct Dataverse to process it asynchronously
Capture the Location header from the 202 Accepted response, which contains the URL of the async operation status resource
Poll the status URL at a reasonable interval, reading the statuscode integer field from the returned JSON
Continue polling until statuscode equals 30 (Succeeded), 31 (Failed), or 32 (Canceled)
On statuscode 30, retrieve the operation result from the response body or the resource URL returned in the result
On statuscode 31 or 32, read the error details from the response to surface a meaningful failure reason
Known gotchas
Terminal statuscode values are 30 = Succeeded, 31 = Failed, 32 = Canceled — not HTTP-style codes; confusing them with HTTP status codes leads to incorrect completion logic
Polling too aggressively can trigger throttling; implement exponential backoff and respect any Retry-After headers returned during polling
The initial 202 response Location header must be preserved exactly — reconstructing the URL from partial data will fail because it includes a system-generated operation identifier
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