capabilities.changed, an invalidation signal for cached get_adcp_capabilities responses.
Request Schema: /schemas/3.0.24/protocol/sync-agent-notification-configs-request.json
Response Schema: /schemas/3.0.24/protocol/sync-agent-notification-configs-response.json
When to call
First callget_adcp_capabilities. Only call this task when the seller advertises:
notifications.supported: true, the same capability_changes block MUST include cache_ttl_seconds and capabilities_version so receivers have a bounded polling fallback and a stable comparison after missed webhooks.
Authentication and Caller Scope
This task MUST only be accepted when the transport request resolves to a stable authenticated principal. The principal can be an OAuth client subject, API-key subject, verified signed-request subject, registry identity, or equivalent deployment identity, but it MUST be stable across retries and future replacements. Sellers MUST reject NO_AUTH, anonymous, or otherwise unbound registrations withAUTH_MISSING when no credentials are present, AUTH_INVALID when presented credentials fail validation, or INVALID_REQUEST when the transport exposes anonymous registration as a malformed request.
The authenticated principal is the owner key for declarative replacement. Sellers MUST NOT key agent-level subscribers only by subscriber_id or URL, because two callers can legitimately choose the same local subscriber ID. One caller’s replacement set MUST NOT read, delete, pause, overwrite, or infer subscribers owned by another principal.
Request Parameters
Each
notification_configs[] entry has:
Endpoint proof
Before activating a new or changed active subscriber, the seller MUST validate the URL and complete endpoint proof of control. The challenge POST is signed with the seller’s RFC 9421 webhook profile key and usesagent-webhook-challenge.json. The receiver echoes the challenge with webhook-challenge-response.json.
Agent-level challenges intentionally do not carry account_id because capability notifications are valid before any account exists. The proof scope is (authenticated caller identity, seller_agent_url, subscriber_id, normalized url, authentication mode/credential binding, normalized event_types). Changing any element of that tuple requires fresh proof before the subscriber can become active.
Replacement Semantics
The submitted array is declarative and complete for the authenticated principal:- Omit
notification_configsis invalid. - Send
notification_configs: []to remove every agent-level subscriber owned by this caller. - Send a non-empty array to replace this caller’s current set with exactly those entries.
subscriber_idis the match key within the caller scope. Existing IDs owned by this caller are replaced; this caller’s persisted IDs missing from the submitted array are removed.- Duplicate
subscriber_idvalues in one request are invalid within that caller-scoped array. - If any entry fails validation or endpoint proof, the seller rejects the replacement and leaves the caller’s prior set unchanged.
Webhook Payload
When the seller’s advertised capability document materially changes, it publishes the newget_adcp_capabilities snapshot first, then fires capabilities.changed to active subscribers:
capabilities_version in the webhook is the post-change revision token and MUST be observable in get_adcp_capabilities before the seller sends the webhook. Receivers SHOULD re-run get_adcp_capabilities, compare adcp.capability_changes.capabilities_version with the webhook’s capabilities_version, and replace their local cache with the fresh response. If the webhook’s capabilities_version is not yet observable, receivers SHOULD retry get_adcp_capabilities with normal transient-error backoff and MUST retain their prior cached snapshot until a fresher authoritative snapshot is read or the cache TTL expires.