/schemas/v2/media-buy/get-products-request.json
Response Schema: /schemas/v2/media-buy/get-products-response.json
Quick Start
Discover products with a natural language brief:Using Structured Filters
You can also use structured filters instead of (or in addition to) a brief:Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brief | string | No | Natural language description of campaign requirements |
brand_manifest | BrandManifest | string | No | Brand information (inline object or URL). See Brand Manifest |
filters | Filters | No | Structured filters (see below) |
Filters Object
| Parameter | Type | Description |
|---|---|---|
delivery_type | string | Filter by "guaranteed" or "non_guaranteed" |
is_fixed_price | boolean | Filter for fixed price vs auction products |
format_types | string[] | Filter by format types (e.g., ["video", "display"]) |
format_ids | FormatID[] | Filter by specific format IDs |
standard_formats_only | boolean | Only return products accepting IAB standard formats |
min_exposures | integer | Minimum exposures needed for measurement validity |
start_date | string | Campaign start date in ISO 8601 format (YYYY-MM-DD) for availability checks |
end_date | string | Campaign end date in ISO 8601 format (YYYY-MM-DD) for availability checks |
budget_range | object | Budget range to filter appropriate products (see Budget Range Object below) |
countries | string[] | Filter by target countries using ISO 3166-1 alpha-2 codes (e.g., ["US", "CA", "GB"]) |
channels | string[] | Filter by advertising channels (e.g., ["display", "video", "dooh", "ctv", "audio", "native"]) |
Budget Range Object
| Parameter | Type | Required | Description |
|---|---|---|---|
currency | string | Yes | ISO 4217 currency code (e.g., "USD", "EUR", "GBP") |
min | number | No* | Minimum budget amount |
max | number | No* | Maximum budget amount |
min or max must be specified.
Response
Returns an array ofproducts, each containing:
| Field | Type | Description |
|---|---|---|
product_id | string | Unique product identifier |
name | string | Human-readable product name |
description | string | Detailed product description |
publisher_properties | PublisherProperty[] | Array of publisher entries, each with publisher_domain and either property_ids or property_tags |
format_ids | FormatID[] | Supported creative format IDs |
delivery_type | string | "guaranteed" or "non_guaranteed" |
delivery_measurement | DeliveryMeasurement | How delivery is measured (impressions, views, etc.) |
pricing_options | PricingOption[] | Available pricing models (CPM, CPCV, etc.) |
brief_relevance | string | Why this product matches the brief (when brief provided) |
get-products-response.json
Common Scenarios
Standard Catalog Discovery
Multi-Format Discovery
Budget and Date Filtering
Property Tag Resolution
Guaranteed Delivery Products
Standard Formats Only
Error Handling
| Error Code | Description | Resolution |
|---|---|---|
AUTH_REQUIRED | Authentication needed for full catalog | Provide credentials via auth header |
INVALID_REQUEST | Brief too long or malformed filters | Check request parameters |
POLICY_VIOLATION | Category blocked for advertiser | See policy response message for details |
Authentication Comparison
See the difference between authenticated and unauthenticated access:- Product Count: Authenticated access returns more products, including private/custom offerings
- Pricing Information: Only authenticated requests receive detailed pricing options (CPM, CPCV, etc.)
- Targeting Details: Custom targeting capabilities may be restricted to authenticated users
- Rate Limits: Unauthenticated requests have lower rate limits
Authentication Behavior
- Without credentials: Returns limited catalog (standard catalog products), no pricing, no custom offerings
- With credentials: Returns complete catalog with pricing and custom products
Asynchronous Operations
Most product searches complete immediately, but some scenarios require asynchronous processing. When this happens, you’ll receive a status other thancompleted and can track progress through webhooks or polling.
When Search Runs Asynchronously
Product search may require async processing in these situations:- Complex searches: Searching across multiple inventory sources or custom curation
- Needs clarification: Your brief is vague and the system needs more information
- Custom products: Bespoke product packages that require human review
Async Status Flow
- MCP
- A2A
Status Overview
| Status | When It Happens | What You Do |
|---|---|---|
completed | Search finished successfully | Process the product results |
input-required | Need clarification on the brief | Answer the question and continue |
working | Searching across multiple sources | Wait for webhook or poll for updates |
submitted | Custom curation queued | Wait for webhook notification |
failed | Search couldn’t complete | Check error message, adjust brief |
Next Steps
After discovering products:- Review Options: Compare products, pricing, and targeting capabilities
- Create Media Buy: Use
create_media_buyto execute campaign - Prepare Creatives: Use
list_creative_formatsto see format requirements - Upload Assets: Use
sync_creativesto provide creative assets
Learn More
- Product Discovery Guide - Understanding briefs and products
- Pricing Models - CPM, CPCV, CPP explained
- Brief Expectations - How to write effective briefs
- Media Products - Product structure and fields