@adcp/sdk API Reference - v14.3.0
    Preparing search index...

    Type Alias LegacyPlacement

    LegacyPlacement: {} & {} & {} & ({} | {}) & {
        kind: "publisher_ref" | "seller_inline";
        placement_id: string;
        publisher_domain?: string;
        seller_agent?: SellerAgentReference;
        name?: string;
        description?: string;
        mode: "targetable" | "included";
        tags?: string[];
        format_ids?: [
            LegacyFormatReferenceStructuredObject,
            ...LegacyFormatReferenceStructuredObject[],
        ];
        format_options?: [ProductFormatDeclaration, ...ProductFormatDeclaration[]];
        video_placement_types?: [VideoPlacementType, ...VideoPlacementType[]];
        audio_distribution_types?: [
            AudioDistributionType,
            ...AudioDistributionType[],
        ];
        sponsored_placement_types?: [
            SponsoredPlacementType,
            ...SponsoredPlacementType[],
        ];
        social_placement_surfaces?: [
            SocialPlacementSurface,
            ...SocialPlacementSurface[],
        ];
        identifiers?: [
            { type: PropertyIdentifierTypes; value: string },
            ...{ type: PropertyIdentifierTypes; value: string }[],
        ];
        dooh_placement_attributes?: ProductDOOHPlacementAttributes;
    } & ({} | {}) & {
        kind: "publisher_ref" | "seller_inline";
        placement_id: string;
        publisher_domain?: string;
        seller_agent?: SellerAgentReference;
        name?: string;
        description?: string;
        mode: "targetable" | "included";
        tags?: string[];
        format_ids?: [
            LegacyFormatReferenceStructuredObject,
            ...LegacyFormatReferenceStructuredObject[],
        ];
        format_options?: [ProductFormatDeclaration, ...ProductFormatDeclaration[]];
        video_placement_types?: [VideoPlacementType, ...VideoPlacementType[]];
        audio_distribution_types?: [
            AudioDistributionType,
            ...AudioDistributionType[],
        ];
        sponsored_placement_types?: [
            SponsoredPlacementType,
            ...SponsoredPlacementType[],
        ];
        social_placement_surfaces?: [
            SocialPlacementSurface,
            ...SocialPlacementSurface[],
        ];
        identifiers?: [
            { type: PropertyIdentifierTypes; value: string },
            ...{ type: PropertyIdentifierTypes; value: string }[],
        ];
        dooh_placement_attributes?: ProductDOOHPlacementAttributes;
    }

    Represents a specific public ad placement within a product's inventory. kind identifies the authority: publisher_ref resolves the canonical {publisher_domain, placement_id} in the publisher's adagents.json; seller_inline is defined by the sales agent and is self-contained only when paired with seller_agent. Legacy inline placements without seller_agent remain valid but are scoped to the enclosing seller and product. Whether a publisher reference resolved from publisher-hosted adagents.json or a community-maintained fallback is resolver metadata, not placement structure. Placement selection purchases inventory; creative assignments may then route creatives only within the purchased set.

    Type Declaration

          • {}
          • {}
          • kind: "publisher_ref" | "seller_inline"

            Placement authority discriminator. publisher_ref is publisher-catalog identity; seller_inline is sales-agent-authored identity.

          • placement_id: string

            Placement identifier. For publisher_ref it is scoped by publisher_domain and resolves in adagents.json. For seller_inline it is scoped by seller_agent, or by the enclosing seller and product for legacy rows.

          • Optionalpublisher_domain?: string

            For publisher_ref, the domain whose adagents.json declares the placement and part of canonical identity. For seller_inline, optional inventory-publisher attribution only; it does not grant the seller authority to mint IDs in that publisher's catalog namespace.

          • Optionalseller_agent?: SellerAgentReference
          • Optionalname?: string

            Human-readable name for the placement (e.g., 'Homepage Banner', 'Article Sidebar'). Required for kind: "seller_inline". May be omitted for publisher-referenced placements because buyers resolve the name from the publisher declaration identified by {publisher_domain, placement_id}.

          • Optionaldescription?: string

            Detailed description of where and how the placement appears

          • mode: "targetable" | "included"

            Required product-level relationship to this placement. targetable means the buyer may include the publisher-scoped ref in targeting_overlay.placement_selection; a creative may be routed there only after it is purchased. included means fixed product inventory: it cannot be independently selected, but across discovery, create, and update a selected request exactly equal to the product's complete included placement set is an inherent restatement and may be echoed on the package without overlay_support.placement_selection. A product containing any included placement MUST NOT declare overlay_support.placement_selection; partial selection requires a separately selectable product configuration. During the migration window ending 2026-11-25, buyers MAY tolerate legacy products that omit mode and treat them as targetable; after that date buyers SHOULD fail closed.

          • Optionaltags?: string[]

            Optional tags for grouping placements within a product (e.g., 'homepage', 'native', 'premium'). When the placement_id comes from the publisher registry, these should align with the registry tags unless the product is narrowing scope.

          • Optionalformat_ids?: [
                LegacyFormatReferenceStructuredObject,
                ...LegacyFormatReferenceStructuredObject[],
            ]

            Deprecated in AdCP 3.2; removed in AdCP 4.0. Legacy named-format placement narrowing. Can include concrete, template, or parameterized format IDs. When present on a product placement, this field narrows the product-level format_ids contract and MUST NOT introduce formats the product does not accept. Use canonical format_options.

            1

          • Optionalformat_options?: [ProductFormatDeclaration, ...ProductFormatDeclaration[]]

            Canonical seller-side narrowing for this product placement. When present, these declarations are intersected with the product-level format_options and MUST NOT introduce a format outside that product upper bound. For kind publisher_ref, buyers MUST also resolve {publisher_domain, placement_id} in the publisher's adagents.json and intersect the publisher catalog constraint: use the public placement's format_options when present (resolving bare format_option_id references against same-file top-level formats[]), otherwise use applicable top-level formats[] scoped to that placement's properties. Omitting this inline field removes only the seller-inline layer; it does not bypass a publisher placement or property-scoped narrowing. The placement inherits the full product-level set only when no applicable publisher catalog narrowing exists. Unresolved publisher placement or format-option references fail closed. Locale policy participates in the same intersection: when the product policy is absent, a placement may introduce any concrete policy as a narrowing of the unconstrained option; when both are present, every placement accepted_language_range must be contained by a product range under RFC 4647 Basic Filtering (fr-CA narrows fr; fr does not narrow fr-CA). Buyers compute effective locale eligibility independently for each placement. Any effective locale-constrained route is canonical-only and has no projecting product or placement format_id.

            1

          • Optionalvideo_placement_types?: [VideoPlacementType, ...VideoPlacementType[]]

            Declared video placement types for this product placement, using IAB Tech Lab/OpenRTB 2.6 video.plcmt definitions with AdCP-native names. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalaudio_distribution_types?: [AudioDistributionType, ...AudioDistributionType[]]

            Declared audio distribution types for this product placement, using IAB Tech Lab/OpenRTB 2.6 audio.feed definitions with AdCP-native names. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalsponsored_placement_types?: [SponsoredPlacementType, ...SponsoredPlacementType[]]

            Declared sponsored-placement types for this product placement, distinguishing where the catalog-driven retail-media placement renders on the retailer surface. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalsocial_placement_surfaces?: [SocialPlacementSurface, ...SocialPlacementSurface[]]

            Declared social-placement surfaces for this product placement, distinguishing the in-app surface where the social placement renders. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalidentifiers?: [
                { type: PropertyIdentifierTypes; value: string },
                ...{ type: PropertyIdentifierTypes; value: string }[],
            ]

            Optional external inventory identifiers for this placement, using the same {type, value} shape as property identifiers. Externally governed IDs should be authority-prefixed (e.g., space:1234931339, geopath:30961, fcc:73953). Seller-local IDs are opaque values scoped by the surrounding publisher namespace. Useful for DOOH venue and installed-endpoint IDs, broadcast facility IDs, and any channel where placements map to externally registered inventory. For kind: publisher_ref, the effective identifier set is the union of the resolved publisher declaration and this product declaration, de-duplicated by exact (type, value); a product cannot suppress a publisher-declared identifier by omission.

            1

          • Optionaldooh_placement_attributes?: ProductDOOHPlacementAttributes
          • {}
          • {}
          • kind: "publisher_ref" | "seller_inline"

            Placement authority discriminator. publisher_ref is publisher-catalog identity; seller_inline is sales-agent-authored identity.

          • placement_id: string

            Placement identifier. For publisher_ref it is scoped by publisher_domain and resolves in adagents.json. For seller_inline it is scoped by seller_agent, or by the enclosing seller and product for legacy rows.

          • Optionalpublisher_domain?: string

            For publisher_ref, the domain whose adagents.json declares the placement and part of canonical identity. For seller_inline, optional inventory-publisher attribution only; it does not grant the seller authority to mint IDs in that publisher's catalog namespace.

          • Optionalseller_agent?: SellerAgentReference
          • Optionalname?: string

            Human-readable name for the placement (e.g., 'Homepage Banner', 'Article Sidebar'). Required for kind: "seller_inline". May be omitted for publisher-referenced placements because buyers resolve the name from the publisher declaration identified by {publisher_domain, placement_id}.

          • Optionaldescription?: string

            Detailed description of where and how the placement appears

          • mode: "targetable" | "included"

            Required product-level relationship to this placement. targetable means the buyer may include the publisher-scoped ref in targeting_overlay.placement_selection; a creative may be routed there only after it is purchased. included means fixed product inventory: it cannot be independently selected, but across discovery, create, and update a selected request exactly equal to the product's complete included placement set is an inherent restatement and may be echoed on the package without overlay_support.placement_selection. A product containing any included placement MUST NOT declare overlay_support.placement_selection; partial selection requires a separately selectable product configuration. During the migration window ending 2026-11-25, buyers MAY tolerate legacy products that omit mode and treat them as targetable; after that date buyers SHOULD fail closed.

          • Optionaltags?: string[]

            Optional tags for grouping placements within a product (e.g., 'homepage', 'native', 'premium'). When the placement_id comes from the publisher registry, these should align with the registry tags unless the product is narrowing scope.

          • Optionalformat_ids?: [
                LegacyFormatReferenceStructuredObject,
                ...LegacyFormatReferenceStructuredObject[],
            ]

            Deprecated in AdCP 3.2; removed in AdCP 4.0. Legacy named-format placement narrowing. Can include concrete, template, or parameterized format IDs. When present on a product placement, this field narrows the product-level format_ids contract and MUST NOT introduce formats the product does not accept. Use canonical format_options.

            1

          • Optionalformat_options?: [ProductFormatDeclaration, ...ProductFormatDeclaration[]]

            Canonical seller-side narrowing for this product placement. When present, these declarations are intersected with the product-level format_options and MUST NOT introduce a format outside that product upper bound. For kind publisher_ref, buyers MUST also resolve {publisher_domain, placement_id} in the publisher's adagents.json and intersect the publisher catalog constraint: use the public placement's format_options when present (resolving bare format_option_id references against same-file top-level formats[]), otherwise use applicable top-level formats[] scoped to that placement's properties. Omitting this inline field removes only the seller-inline layer; it does not bypass a publisher placement or property-scoped narrowing. The placement inherits the full product-level set only when no applicable publisher catalog narrowing exists. Unresolved publisher placement or format-option references fail closed. Locale policy participates in the same intersection: when the product policy is absent, a placement may introduce any concrete policy as a narrowing of the unconstrained option; when both are present, every placement accepted_language_range must be contained by a product range under RFC 4647 Basic Filtering (fr-CA narrows fr; fr does not narrow fr-CA). Buyers compute effective locale eligibility independently for each placement. Any effective locale-constrained route is canonical-only and has no projecting product or placement format_id.

            1

          • Optionalvideo_placement_types?: [VideoPlacementType, ...VideoPlacementType[]]

            Declared video placement types for this product placement, using IAB Tech Lab/OpenRTB 2.6 video.plcmt definitions with AdCP-native names. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalaudio_distribution_types?: [AudioDistributionType, ...AudioDistributionType[]]

            Declared audio distribution types for this product placement, using IAB Tech Lab/OpenRTB 2.6 audio.feed definitions with AdCP-native names. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalsponsored_placement_types?: [SponsoredPlacementType, ...SponsoredPlacementType[]]

            Declared sponsored-placement types for this product placement, distinguishing where the catalog-driven retail-media placement renders on the retailer surface. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalsocial_placement_surfaces?: [SocialPlacementSurface, ...SocialPlacementSurface[]]

            Declared social-placement surfaces for this product placement, distinguishing the in-app surface where the social placement renders. Most concrete placements SHOULD declare a single value; aggregate placements MAY declare multiple values. This is seller-declared discovery metadata, not independent verification of inventory quality or delivery context.

            1

          • Optionalidentifiers?: [
                { type: PropertyIdentifierTypes; value: string },
                ...{ type: PropertyIdentifierTypes; value: string }[],
            ]

            Optional external inventory identifiers for this placement, using the same {type, value} shape as property identifiers. Externally governed IDs should be authority-prefixed (e.g., space:1234931339, geopath:30961, fcc:73953). Seller-local IDs are opaque values scoped by the surrounding publisher namespace. Useful for DOOH venue and installed-endpoint IDs, broadcast facility IDs, and any channel where placements map to externally registered inventory. For kind: publisher_ref, the effective identifier set is the union of the resolved publisher declaration and this product declaration, de-duplicated by exact (type, value); a product cannot suppress a publisher-declared identifier by omission.

            1

          • Optionaldooh_placement_attributes?: ProductDOOHPlacementAttributes