Driftwatch

Vercel / Vercel REST API /

Breakingdirection flip: their tools call this safe

origin can now return "org-admin-sync"

What changed

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

Affects membership.joinedFrom.origin on Team reachable from 3 operations.

New value: org-admin-sync.

can now return "org-admin-sync"

Who is affected

Code that reads Vercel's Team objects, used by 3 Vercel operations.

Before and after

WhereBeforeAfter
Team.membership.joinedFrom.origin"account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams""account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "org-admin-sync", "organization-teams", "saml", "teams"
POST /v1/teams/{teamId}/request · joinedFrom.origin"account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams""account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "org-admin-sync", "organization-teams", "saml", "teams"
TeamLimited.membership.joinedFrom.origin"account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams""account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "org-admin-sync", "organization-teams", "saml", "teams"
GET /v1/teams/{teamId}/request/{userId} · joinedFrom.origin"account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams""account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "org-admin-sync", "organization-teams", "saml", "teams"
GET /v3/teams/{teamId}/members · members[].joinedFrom.origin"account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "organization-teams", "saml", "teams""account-update", "bitbucket", "dsync", "feedback", "github", "gitlab", "import", "link", "mail", "nsnb-auto-approve", "nsnb-hobby-upgrade", "nsnb-invite", "nsnb-redeploy", "nsnb-redeploy-attribution-card", "nsnb-request-access", "nsnb-viewer-upgrade", "org-admin-sync", "organization-teams", "saml", "teams"

Code that breaks

switch (response.membership.joinedFrom.origin) {
  // existing branches …
  // no branch for "org-admin-sync"
  default:
    throw new Error("unexpected origin");
}

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