@adcp/client API Reference - v4.18.2
    Preparing search index...

    Interface GetProductsRequest

    Request parameters for discovering or refining advertising products. buying_mode declares the buyer's intent: 'brief' for curated discovery, 'wholesale' for raw catalog access, or 'refine' to iterate on known products and proposals.

    interface GetProductsRequest {
        buying_mode: "brief" | "wholesale" | "refine";
        brief?: string;
        refine?: (
            | { scope: "request"; ask: string }
            | {
                scope: "product";
                id: string;
                action: "include" | "omit" | "more_like_this";
                ask?: string;
            }
            | {
                scope: "proposal";
                id: string;
                action: "include"
                | "omit"
                | "finalize";
                ask?: string;
            }
        )[];
        brand?: BrandReference;
        catalog?: Catalog;
        account?: AccountReference;
        preferred_delivery_types?: DeliveryType[];
        filters?: ProductFilters;
        property_list?: PropertyListReference;
        fields?: (
            | "description"
            | "name"
            | "forecast"
            | "channels"
            | "delivery_type"
            | "format_ids"
            | "expires_at"
            | "conversion_tracking"
            | "product_id"
            | "enforced_policies"
            | "catalog_types"
            | "pricing_options"
            | "product_card"
            | "publisher_properties"
            | "placements"
            | "exclusivity"
            | "outcome_measurement"
            | "delivery_measurement"
            | "reporting_capabilities"
            | "creative_policy"
            | "data_provider_signals"
            | "metric_optimization"
            | "max_optimization_goals"
            | "catalog_match"
            | "brief_relevance"
            | "product_card_detailed"
            | "collections"
            | "collection_targeting_allowed"
            | "installments"
            | "trusted_match"
        )[];
        time_budget?: Duration;
        pagination?: PaginationRequest;
        context?: ContextObject;
        required_policies?: string[];
        ext?: ExtensionObject;
    }
    Index

    Properties

    buying_mode: "brief" | "wholesale" | "refine"

    Declares buyer intent for this request. 'brief': publisher curates product recommendations from the provided brief. 'wholesale': buyer requests raw inventory to apply their own audiences — brief must not be provided, and proposals are omitted. 'refine': iterate on products and proposals from a previous get_products response using the refine array of change requests. v3 clients MUST include buying_mode. Sellers receiving requests from pre-v3 clients without buying_mode SHOULD default to 'brief'.

    brief?: string

    Natural language description of campaign requirements. Required when buying_mode is 'brief'. Must not be provided when buying_mode is 'wholesale' or 'refine'.

    refine?: (
        | { scope: "request"; ask: string }
        | {
            scope: "product";
            id: string;
            action: "include" | "omit" | "more_like_this";
            ask?: string;
        }
        | {
            scope: "proposal";
            id: string;
            action: "include"
            | "omit"
            | "finalize";
            ask?: string;
        }
    )[]

    Array of change requests for iterating on products and proposals from a previous get_products response. Each entry declares a scope (request, product, or proposal) and what the buyer is asking for. Only valid when buying_mode is 'refine'. The seller responds to each entry via refinement_applied in the response, matched by position.

    Type Declaration

    • { scope: "request"; ask: string }
      • scope: "request"

        Change scoped to the overall request — direction for the selection as a whole.

      • ask: string

        What the buyer is asking for at the request level (e.g., 'more video options and less display', 'suggest how to combine these products').

    • {
          scope: "product";
          id: string;
          action: "include" | "omit" | "more_like_this";
          ask?: string;
      }
      • scope: "product"

        Change scoped to a specific product.

      • id: string

        Product ID from a previous get_products response.

      • action: "include" | "omit" | "more_like_this"

        'include': return this product with updated pricing and data. 'omit': exclude this product from the response. 'more_like_this': find additional products similar to this one (the original is also returned).

      • Optionalask?: string

        What the buyer is asking for on this product. For 'include': specific changes to request (e.g., 'add 16:9 format'). For 'more_like_this': what 'similar' means (e.g., 'same audience but video format'). Ignored when action is 'omit'.

    • {
          scope: "proposal";
          id: string;
          action: "include" | "omit" | "finalize";
          ask?: string;
      }
      • scope: "proposal"

        Change scoped to a specific proposal.

      • id: string

        Proposal ID from a previous get_products response.

      • action: "include" | "omit" | "finalize"

        'include': return this proposal with updated allocations and pricing. 'omit': exclude this proposal from the response. 'finalize': request firm pricing and inventory hold — transitions a draft proposal to committed with an expires_at hold window. May trigger seller-side approval (HITL). The buyer should not set a time_budget for finalize requests — they represent a commitment to wait for the result.

      • Optionalask?: string

        What the buyer is asking for on this proposal (e.g., 'shift more budget toward video', 'reduce total by 10%'). Ignored when action is 'omit'.

    catalog?: Catalog
    preferred_delivery_types?: DeliveryType[]

    Delivery types the buyer prefers, in priority order. Unlike filters.delivery_type which excludes non-matching products, this signals preference for curation — the publisher may still include other delivery types when they match the brief well.

    filters?: ProductFilters
    property_list?: PropertyListReference
    fields?: (
        | "description"
        | "name"
        | "forecast"
        | "channels"
        | "delivery_type"
        | "format_ids"
        | "expires_at"
        | "conversion_tracking"
        | "product_id"
        | "enforced_policies"
        | "catalog_types"
        | "pricing_options"
        | "product_card"
        | "publisher_properties"
        | "placements"
        | "exclusivity"
        | "outcome_measurement"
        | "delivery_measurement"
        | "reporting_capabilities"
        | "creative_policy"
        | "data_provider_signals"
        | "metric_optimization"
        | "max_optimization_goals"
        | "catalog_match"
        | "brief_relevance"
        | "product_card_detailed"
        | "collections"
        | "collection_targeting_allowed"
        | "installments"
        | "trusted_match"
    )[]

    Specific product fields to include in the response. When omitted, all fields are returned. Use for lightweight discovery calls where only a subset of product data is needed (e.g., just IDs and pricing for comparison). Required fields (product_id, name) are always included regardless of selection.

    time_budget?: Duration

    Maximum time the buyer will commit to this request. The seller returns the best results achievable within this budget and does not start processes (human approvals, expensive external queries) that cannot complete in time. When omitted, the seller decides timing.

    pagination?: PaginationRequest
    context?: ContextObject
    required_policies?: string[]

    Registry policy IDs that the buyer requires to be enforced for products in this response. Sellers filter products to only those that comply with or already enforce the requested policies.

    ext?: ExtensionObject