- **Starting or completing an OAuth flow for a credential that is not set up for OAuth now returns 400 instead of 500 (#4906).** A credential never created as OAuth (for example an API key) has no OAuth columns at all, and loading them failed, so `POST /api/v1/oauth/initiate` answered `500 Failed to load credential`. Each endpoint now answers the 400 it already gave an OAuth credential with an empty configuration: initiate returns `Credential missing oauth_client_id or oauth_auth_url`; loopback (previously 404) and exchange return `Credential missing OAuth configuration`. Exchange returns that 400 before calling the provider, instead of a 502 from an empty token URL.