b26c5e4dd0
Service principals (Bearer dfk_...) may only reach the data plane (threads / runs / assistants). All control-plane routes — mcp, models, skills, channels, agents, memory, auth, management — now return 403 insufficient_scope. The check sits after the NULL/401 guard so an invalid key on a control-plane path still returns 401, not 403. Human cookie requests bypass the bearer branch entirely and are unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>