Summary
After integrating adcp==6.2.0b4, Prebid Sales Agent no longer needs the older capabilities-status or publisher-portfolio monkey patches: capabilities_response() emits status: "completed" natively, and DecisioningPlatform.get_adcp_capabilities_for_request() lets the seller return tenant-scoped media_buy.portfolio.publisher_domains.
One local SDK workaround remains: Sales Agent still monkey-patches PlatformHandler.get_adcp_capabilities() to append tenant-specific webhook_signing because the typed request-scoped capabilities path validates webhook_signing.supported=True against an SDK-wired WebhookSender.
Sales Agent signs and sends buyer-protocol webhooks through its own service path, backed by tenant-specific signing credentials. It can honestly advertise RFC 9421 webhook signing for tenants with an active usable credential, but it cannot currently express that through the SDK typed capabilities hook without also wiring the SDK webhook sender/supervisor stack.
Current adopter-side workaround
Sales Agent imports a side-effect module that replaces:
adcp.decisioning.handler.PlatformHandler.get_adcp_capabilities
The patch calls the original SDK handler and, when missing, appends:
{
"webhook_signing": {
"supported": true,
"profile": "adcp/webhook-signing/v1",
"algorithms": ["ed25519"],
"legacy_hmac_fallback": true
}
}
The values are resolved per tenant from Sales Agent's own TenantSigningCredential store. When no usable credential exists, Sales Agent advertises:
{
"webhook_signing": {
"supported": false,
"legacy_hmac_fallback": true
}
}
Expected
The SDK should provide a first-class way for adopters that own webhook delivery/signing outside the SDK WebhookSender implementation to advertise dynamic webhook_signing capabilities without monkey-patching PlatformHandler.
Possible approaches:
- Allow
DecisioningPlatform.get_adcp_capabilities_for_request() to return webhook_signing when the adopter declares an explicit “external webhook sender/signing is handled by platform” capability/flag.
- Or expose a narrower hook just for
webhook_signing capability resolution, with ToolContext/tenant context available.
- Or make
validate_webhook_signing_for_capabilities() accept an adopter-provided validator/interface rather than requiring the SDK WebhookSender instance.
The important property is that seller apps should compose with SDK capabilities projection and validation, not patch PlatformHandler.get_adcp_capabilities() after the fact.
Why this matters
Webhook signing is tenant-specific in multi-tenant sellers, and some adopters already have production webhook delivery/signing infrastructure outside the SDK. Requiring SDK-owned WebhookSender wiring to advertise webhook_signing forces otherwise clean adopters into local response patches.
Related: #867, which is now mostly resolved in beta 4 for status + dynamic portfolio, but does not cover this remaining webhook-signing validation/extension point.
Summary
After integrating
adcp==6.2.0b4, Prebid Sales Agent no longer needs the older capabilities-status or publisher-portfolio monkey patches:capabilities_response()emitsstatus: "completed"natively, andDecisioningPlatform.get_adcp_capabilities_for_request()lets the seller return tenant-scopedmedia_buy.portfolio.publisher_domains.One local SDK workaround remains: Sales Agent still monkey-patches
PlatformHandler.get_adcp_capabilities()to append tenant-specificwebhook_signingbecause the typed request-scoped capabilities path validateswebhook_signing.supported=Trueagainst an SDK-wiredWebhookSender.Sales Agent signs and sends buyer-protocol webhooks through its own service path, backed by tenant-specific signing credentials. It can honestly advertise RFC 9421 webhook signing for tenants with an active usable credential, but it cannot currently express that through the SDK typed capabilities hook without also wiring the SDK webhook sender/supervisor stack.
Current adopter-side workaround
Sales Agent imports a side-effect module that replaces:
The patch calls the original SDK handler and, when missing, appends:
{ "webhook_signing": { "supported": true, "profile": "adcp/webhook-signing/v1", "algorithms": ["ed25519"], "legacy_hmac_fallback": true } }The values are resolved per tenant from Sales Agent's own
TenantSigningCredentialstore. When no usable credential exists, Sales Agent advertises:{ "webhook_signing": { "supported": false, "legacy_hmac_fallback": true } }Expected
The SDK should provide a first-class way for adopters that own webhook delivery/signing outside the SDK
WebhookSenderimplementation to advertise dynamicwebhook_signingcapabilities without monkey-patchingPlatformHandler.Possible approaches:
DecisioningPlatform.get_adcp_capabilities_for_request()to returnwebhook_signingwhen the adopter declares an explicit “external webhook sender/signing is handled by platform” capability/flag.webhook_signingcapability resolution, withToolContext/tenant context available.validate_webhook_signing_for_capabilities()accept an adopter-provided validator/interface rather than requiring the SDKWebhookSenderinstance.The important property is that seller apps should compose with SDK capabilities projection and validation, not patch
PlatformHandler.get_adcp_capabilities()after the fact.Why this matters
Webhook signing is tenant-specific in multi-tenant sellers, and some adopters already have production webhook delivery/signing infrastructure outside the SDK. Requiring SDK-owned
WebhookSenderwiring to advertisewebhook_signingforces otherwise clean adopters into local response patches.Related: #867, which is now mostly resolved in beta 4 for status + dynamic portfolio, but does not cover this remaining webhook-signing validation/extension point.