Use this playbook to separate temporary missing-resource lookups from permanent removals, then fix scope, lifecycle, and identifier drift safely.
Last reviewed: February 23, 2026|Editorial standard: source-backed operational guidance
Return 410 only when the server knows the resource is intentionally and permanently removed. Use 404 when a current representation is not found and permanence is not asserted.
Most cases are scope mismatch (wrong account/project/region/subscription), stale identifiers, or lifecycle races where callers query before resources are visible in that scope.
Retry only for known transient lifecycle windows (for example post-create propagation). For permanent removals or wrong identifiers, retries will not recover without data or scope correction.
Publish deprecation metadata before retirement and keep it available through the full migration window. Send the RFC 8594 `Sunset` header with a clear retirement date on affected responses. Link a canonical replacement resource in response metadata and documentation so clients can switch deterministically. Publish upgrade timelines, examples, and cutover checkpoints before you enforce 410 behavior.