Driftwatch

Cloudflare / Cloudflare API /

Breakingdirection flip: their tools call this safe

type can now return "end_user"

What changed

Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

Affects type on access_self_hosted_props reachable from 4 operations.

New value: end_user.

can now return "end_user"

Who is affected

Code that reads Cloudflare's access_self_hosted_props objects, used by 4 Cloudflare operations.

Before and after

WhereBeforeAfter
access_self_hosted_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_app_launcher_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_biso_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_bookmark_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_infra_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_mcp_portal_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_mcp_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_proxy_endpoint_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_rdp_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_saas_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_ssh_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_vnc_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"
access_warp_props.type"app_launcher", "biso", "bookmark", "dash_sso", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp""app_launcher", "biso", "bookmark", "dash_sso", "end_user", "infrastructure", "mcp", "mcp_portal", "proxy_endpoint", "rdp", "saas", "self_hosted", "ssh", "vnc", "warp"

Code that breaks

switch (response.type) {
  // existing branches …
  // no branch for "end_user"
  default:
    throw new Error("unexpected type");
}

Based on Cloudflare’s published API specification. How severity is decided.