@adcp/sdk API Reference - v14.0.0-beta.6
    Preparing search index...

    Interface AdcpCapabilitiesConfig

    interface AdcpCapabilitiesConfig {
        major_versions?: number[];
        supported_versions?: string[];
        features?: Partial<MediaBuyFeatures>;
        account?: Partial<AccountCapabilities>;
        creative?: Partial<CreativeCapabilities>;
        extensions_supported?: string[];
        request_signing?: {
            supported: boolean;
            covers_content_digest?: "required" | "forbidden" | "either";
            required_for?: string[];
            warn_for?: string[];
            supported_for?: string[];
            protocol_methods_supported_for?: string[];
            protocol_methods_warn_for?: string[];
            protocol_methods_required_for?: string[];
        };
        specialisms?: AdCPSpecialism[];
        idempotency?: { replay_ttl_seconds?: number };
        capability_changes?: {
            capabilities_version?: string;
            last_modified?: string;
            cache_ttl_seconds?: number;
            notifications?:
                | CapabilityChangeNotificationsSupported
                | CapabilityChangeNotificationsUnsupported;
        };
        portfolio?: {
            publisher_domains: string[];
            primary_channels?: MediaChannel[];
            primary_countries?: string[];
            description?: string;
            advertising_policies?: string;
        };
        overrides?: AdcpCapabilitiesOverrides;
    }
    Index

    Properties

    major_versions?: number[]
    supported_versions?: string[]

    Release-precision versions this seller supports (AdCP 3.1+ per spec PR adcontextprotocol/adcp#3493). Each entry parses to a major via parseAdcpMajorVersion — the union of these majors and major_versions defines the seller's accepted set for the wire-level adcp_major_version / adcp_version claim a buyer may carry.

    3.0-pinned sellers can ignore this field. 3.1+ sellers should declare here the same release-precision strings they emit in adcp_version on responses, so buyers receiving VERSION_UNSUPPORTED can read the supported set off the error envelope and downgrade their pin.

    features?: Partial<MediaBuyFeatures>
    account?: Partial<AccountCapabilities>
    creative?: Partial<CreativeCapabilities>
    extensions_supported?: string[]
    request_signing?: {
        supported: boolean;
        covers_content_digest?: "required" | "forbidden" | "either";
        required_for?: string[];
        warn_for?: string[];
        supported_for?: string[];
        protocol_methods_supported_for?: string[];
        protocol_methods_warn_for?: string[];
        protocol_methods_required_for?: string[];
    }

    RFC 9421 request-signing verifier capability. See docs/building/implementation/security.mdx#signed-requests-transport-layer. Emitted verbatim in get_adcp_capabilities.request_signing. Omit unless the agent actually verifies incoming signatures — a supported: true claim without a working verifier is graded as FAIL by the conformance runner (see @adcp/sdk/testing/storyboard/request-signing).

    Type Declaration

    • supported: boolean

      Whether this agent verifies RFC 9421 signatures on incoming requests. When true, signatures present on requests are validated per the AdCP request-signing profile. When false or absent, signatures are ignored (requests are bearer-authenticated only).

    • Optionalcovers_content_digest?: "required" | "forbidden" | "either"

      Policy for content-digest coverage in request signatures. In AdCP 3.2 and later, an agent with request_signing.supported=true MUST explicitly emit 'required': every accepted signature on a request with a body covers content-digest, and a body-unbound signature is rejected with request_signature_components_incomplete. Omission retains the legacy effective default of 'either' only for a 3.0/3.1 response; 3.2 responses require this field explicitly. 'either' and 'forbidden' are deprecated legacy 3.0/3.1 postures retained only for version negotiation with pre-3.2 peers; they MUST NOT be advertised as a 3.2 signing posture and are removed in 4.0. A shared endpoint MUST select the verifier policy from trusted endpoint configuration and negotiated capabilities before dispatch, never from an unbound request-body version field.

    • Optionalrequired_for?: string[]

      AdCP protocol operation names (e.g., 'create_media_buy') for which this agent rejects an unsigned request with request_signature_required unless an independently valid configured fallback authenticator succeeds. Not MCP tool names, A2A skill names, or any transport-specific rename — verifiers MUST NOT accept operation names that are not defined by the AdCP protocol spec. JSON-RPC protocol method names like tasks/cancel belong in protocol_methods_required_for, not here. Empty in 3.0 by default; sellers populate selectively during per-counterparty pilots. In 4.0 this list MUST include all spend-committing operations the agent supports (create_media_buy, acquire_*, etc.). Every operation listed MUST also appear in supported_for; see x-adcp-validation.

    • Optionalwarn_for?: string[]

      AdCP protocol operation names for shadow-mode verification. The verifier records missing signatures and well-formed signatures that fail verification or body binding, but MUST NOT establish verified-signer identity from a failed signature; processing continues only when an independent bearer, API-key, or mTLS authenticator succeeds. A partial or malformed Signature / Signature-Input pair always hard-rejects. Used as a bridge between supported_for and required_for. Precedence: required_for > warn_for > supported_for. An operation MUST NOT appear in both warn_for and required_for; see x-adcp-validation.

    • Optionalsupported_for?: string[]

      AdCP protocol operation names for which this agent verifies signatures when present but does not require them. Under the 3.2 profile, a presented signature on a body-bearing request without content-digest coverage rejects even though an unsigned request may use configured fallback authentication. Typically a superset of required_for and warn_for.

    • Optionalprotocol_methods_supported_for?: string[]

      JSON-RPC protocol method names (e.g., 'tasks/cancel', 'tasks/get') for which this agent verifies signatures when present. Under the 3.2 profile, a presented signature on a body-bearing request without content-digest coverage rejects. Disjoint from supported_for, which carries AdCP tool names only. Items MUST be wire-format JSON-RPC method strings containing /; plain AdCP tool names belong in supported_for.

    • Optionalprotocol_methods_warn_for?: string[]

      Protocol method names for shadow-mode verification, mirroring warn_for in the AdCP-tool namespace. Missing signatures and well-formed signatures that fail verification or body binding are recorded but MUST NOT establish verified-signer identity; processing continues only when an independent authenticator succeeds. A partial or malformed Signature / Signature-Input pair always hard-rejects. An item MUST NOT appear in both protocol_methods_warn_for and protocol_methods_required_for; see x-adcp-validation.

    • Optionalprotocol_methods_required_for?: string[]

      JSON-RPC protocol method names for which this agent rejects an unsigned request with request_signature_required unless an independently valid configured fallback authenticator succeeds. Separate namespace from required_for: this bucket binds against the JSON-RPC method field, not tools/call params.name. Every listed method MUST also appear in protocol_methods_supported_for; see x-adcp-validation.

    specialisms?: AdCPSpecialism[]

    Specialism claims the agent supports. Each entry maps to a storyboard bundle under /compliance/{version}/specialisms/{id}/; the AAO compliance runner executes the matching storyboards to verify. Only list specialisms the agent actually implements.

    idempotency?: { replay_ttl_seconds?: number }

    Seller-declared idempotency replay window, required on get_adcp_capabilities responses per AdCP spec. Defaults to 86400 (24h). Spec bounds are 3600 (1h) to 604800 (7d); clampReplayTtl enforces the range on output.

    When using createIdempotencyStore from @adcp/sdk/server, omit this — the framework reads idempotency.ttlSeconds from the wired store so the declared capability always matches actual behavior.

    capability_changes?: {
        capabilities_version?: string;
        last_modified?: string;
        cache_ttl_seconds?: number;
        notifications?:
            | CapabilityChangeNotificationsSupported
            | CapabilityChangeNotificationsUnsupported;
    }

    Freshness and notification support for the capability document.

    Type Declaration

    • Optionalcapabilities_version?: string

      Opaque revision token for the full capability document. Required when notifications.supported: true because capabilities.changed webhooks use this as the read-after-notify fence. Sellers SHOULD change this value whenever any material field in get_adcp_capabilities changes. Buyers MUST treat it as opaque and compare it only for equality.

      1

      255

    • Optionallast_modified?: string

      ISO 8601 timestamp when the seller last changed the advertised capability document. This is the scoped replacement for legacy top-level last_updated when buyers need cache validation semantics.

      date-time

    • Optionalcache_ttl_seconds?: number

      Maximum time a buyer or registry SHOULD reuse this capability response before refreshing when it has no fresher invalidation signal. Sellers that emit capabilities.changed webhooks SHOULD still set a bounded TTL so consumers can recover from missed notifications. This is a cache hint, not an authorization lifetime.

      60

      604800

    • Optionalnotifications?:
          | CapabilityChangeNotificationsSupported
          | CapabilityChangeNotificationsUnsupported

      Whether the seller supports agent-level capability-change webhooks. When supported, interested consumers register endpoint subscribers with sync_agent_notification_configs; each capabilities.changed fire is a small invalidation payload, and consumers repair by re-reading get_adcp_capabilities.

    portfolio?: {
        publisher_domains: string[];
        primary_channels?: MediaChannel[];
        primary_countries?: string[];
        description?: string;
        advertising_policies?: string;
    }
    overrides?: AdcpCapabilitiesOverrides

    Per-domain capability blocks deep-merged on top of the framework's auto-derived response. Use when you need to surface fields the top-level AdcpCapabilitiesConfig doesn't model — execution.targeting, audience_targeting, content_standards channels, conversion_tracking identifier types, compliance_testing scenarios, etc.

    Deep-merge semantics:

    • nested objects merge recursively;
    • arrays REPLACE (not concat) so callers stay in control of cardinality;
    • primitive overrides replace the auto-derived value.

    Top-level fields the framework owns (adcp, supported_protocols, specialisms, extensions_supported) are not accepted here — configure them via their dedicated fields on AdcpCapabilitiesConfig.