Product Set
Updated: Mar 20, 2026
Copy for LLM
Ads in WhatsApp Status are available via the Marketing API. Learn more about ads in WhatsApp Status.
A product set is a group of related items in a product catalog.
Reading
A call to this endpoint returns Product Set data.
Examples
To get a product set, send a
GET request:
curl -i -X GET "https://graph.facebook.com/PRODUCT-SET-ID?access_token=ACCESS-TOKEN"
Parameters
This endpoint doesn't have any parameters.
Fields
| Field | Description |
|---|---|
idnumeric string |
ID of the product set.
default |
auto_creation_urlstring |
URL scraped to create a product set.
|
filterstring |
The filter rule that defines the set of products in the catalog
default |
latest_metadataProductSetMetadata |
Latest product set metadata
|
live_metadataProductSetMetadata |
Live product set metadata, which passed integrity review
|
namestring |
The name given by the owner of this product set
default |
Product catalog for this product set
| |
product_countunsigned int32 |
Count of products in this product set
|
retailer_idstring |
Retailer's ID for the product set.
default |
Edges
| Edge | Description |
|---|---|
automotive_modelsEdge<AutomotiveModel> |
Automotive models in a product set
|
destinationsEdge<Destination> |
Destinations that belong to this product set
|
flightsEdge<Flight> |
Flights that belong to this product set
|
home_listingsEdge<HomeListing> |
Home listings that belong to this product set
|
hotelsEdge<Hotel> |
Hotels that belong to this product set
|
productsEdge<ProductItem> |
Product items that belong to this product set
|
vehicle_offersEdge<VehicleOffer> |
Vehicle offers that belong to this set
|
vehiclesEdge<Vehicle> |
Vehicles that belong to this set
|
Error Codes
| Error Code | Description |
|---|---|
100 | Invalid parameter |
368 | The action attempted has been deemed abusive or is otherwise disallowed |
80009 | There have been too many calls to this Catalog account. Wait a bit and try again. For more info, please refer to /docs/graph-api/overview/rate-limiting. |
190 | Invalid OAuth 2.0 Access Token |
104 | Incorrect signature |
Creating
/{product_catalog_id}/product_sets
You can make a POST request to product_sets edge from the following paths:
When posting to this edge, a ProductSet will be created.
Example
POST /v25.0/<PRODUCT_CATALOG_ID>/product_sets HTTP/1.1 Host: graph.facebook.com name=Test+Set&filter=%7B%22product_type%22%3A%7B%22i_contains%22%3A%22shirt%22%7D%7D
Try it in Graph API Explorer
If you want to learn how to use the Graph API, read our Using Graph API guide
Parameters
| Parameter | Description |
|---|---|
filterA JSON-encoded rule |
Filter rules to define a product set (max length: 500 KiB)
|
metadataJSON object |
Product set metadata, which can be used for creating product collections
cover_image_url URI
cover_image_url
description string
description
external_url URI
external_url
external_url_handle string
external_url_handle
Show child parameters |
nameUTF-8 encoded string |
Name of the product set
required |
publish_to_shopsarray<JSON object> |
Shop ids where this product set should be published as collection.
shop_id numeric string
shop_id
ordering_index int64
ordering_index
Show child parameters |
retailer_idUTF-8 encoded string |
External product set retailer id
|
Return Type
This endpoint supports read-after-write and will read the node represented by id in the return type.
Struct {
id: numeric string,
}
Error Codes
| Error Code | Description |
|---|---|
10803 | Product set with the same filters already exists |
100 | Invalid parameter |
368 | The action attempted has been deemed abusive or is otherwise disallowed |
415 | Two factor authentication required. User have to enter a code from SMS or TOTP code generator to pass 2fac. This could happen when accessing a 2fac-protected asset like a page that is owned by a 2fac-protected business manager. |
190 | Invalid OAuth 2.0 Access Token |
200 | Permissions error |
80009 | There have been too many calls to this Catalog account. Wait a bit and try again. For more info, please refer to /docs/graph-api/overview/rate-limiting. |
Updating
Update an existing product set.
Example
To update a product set, send a
POST request:curl -i -X "https://graph.facebook.com/PRODUCT-SET-ID?name=Product Set Name,filter={'product_type': {'contains': 'shirt'}},access_token=ACCESS-TOKEN"
/{product_set_id}
You can update a ProductSet by making a POST request to /{product_set_id}.
Parameters
| Parameter | Description |
|---|---|
filterA JSON-encoded rule |
Filter rules to define a product set (max length: 500 KiB)
|
metadataJSON object |
Product set metadata, which can be used for creating product collections
cover_image_url URI
cover_image_url
description string
description
external_url URI
external_url
external_url_handle string
external_url_handle
Show child parameters |
nameUTF-8 encoded string |
Name of the product set
|
publish_to_shopsarray<JSON object> |
List of shop ids where this product set should be published as collection.
shop_id numeric string
shop_id
ordering_index int64
ordering_index
Show child parameters |
retailer_idUTF-8 encoded string |
External product set retailer id
|
Return Type
This endpoint supports read-after-write and will read the node represented by id in the return type.
Struct {
id: numeric string,
}
Error Codes
| Error Code | Description |
|---|---|
100 | Invalid parameter |
10803 | Product set with the same filters already exists |
80009 | There have been too many calls to this Catalog account. Wait a bit and try again. For more info, please refer to /docs/graph-api/overview/rate-limiting. |
200 | Permissions error |
368 | The action attempted has been deemed abusive or is otherwise disallowed |
415 | Two factor authentication required. User have to enter a code from SMS or TOTP code generator to pass 2fac. This could happen when accessing a 2fac-protected asset like a page that is owned by a 2fac-protected business manager. |
Deleting
/{product_set_id}
You can delete a ProductSet by making a DELETE request to /{product_set_id}.
By default a product set can not be deleted while it is being used in an active ad, shop collection, or other usages. To override this behavior, include
allow_live_product_set_deletion=true in your request.
Parameters
| Parameter | Description |
|---|---|
allow_live_product_set_deletionboolean | Default value: false
Flag to allow the deletion of live product set
|
Return Type
Struct {
success: bool,
}
Error Codes
| Error Code | Description |
|---|---|
801 | Invalid operation |
100 | Invalid parameter |
200 | Permissions error |
Filter Rules
Creating a product set with an empty
filter parameter indicates that all items in the product catalog should be in the set. Each rule is a JSON-encoded string. An empty filter parameter can be specified using either an empty parameter value or an empty JSON object, {}.Recommendation: Query with content type
application/json.Limitations
- If the filter rules you set result in an empty product set, ads tied to this product set will not deliver.
- The
containsoperators can only be used for string matching when creating product sets. Forenumvalues use theeqoperators. - Filter operators are not case sensitive. However,
i_*operators can still be used. - You can’t use non-English Unicode characters for filters in labels.
For a full list of limitations and examples, along with useful tips about how to use punctuation characters to create and manage product sets, see this Business Help Center article
Filter rules contain fields and operators in the following syntax:
curl -i -X POST "https://graph.facebook.com/PRODUCT-SET-ID?
name=Product Set Name,
filter={'field-name': {'operator-type': 'query-value'}},
access_token=ACCESS-TOKEN"
Fields
| Field | Description |
|---|---|
age_group | The target age group for an item. |
agent_fb_page_id | The Facebook Page ID for the real estate agent. |
app_category | The type of application. |
app_subcategory | The subcategory of the application, such as arcade game. |
awards | Notable awards or nominations. |
availabilityHome Listings – For Dynamic Ads
enum {available_soon, for_sale, for_rent, off_market, recently_sold, sale_pending}
Home Listings – For Marketplace
enum {for_rent}
Product Items
enum {available for order, in stock, preorder, out of stock}
Vehicles
enum {available, not_available}
| The availability for an item, home listing, or vehicle. Note: Vehicles that are unavailable in an ad are not visible to the public. |
base_price_amount | The base price per night for a hotel. base_price and base_price_currency are required. |
body_style | The body style of a vehicle. For Marketplace and dynamic ads. |
brand | The brand of a product item, hotel, media title, or app. |
cast | Actors in the production. |
category | The category of the product item. |
city | The city where a hotel, destination, automobile dealership, or home listing is located. |
city_id | The city ID where a hotel, destination, automobile dealership, or home listing is located. |
city_page_id | The value to use in a deep link URL ( template_URL) in ad creative. |
color | The color of an item. |
condition
For Product Items
enum {new, refurbished, used}
For Vehicles
enum {Excellent, Good, Fair, Poor, Other}
| The condition of a product item or vehicle. |
content_rating | Official content rating of the item. |
country | The country where a hotel, home listing, automobile dealership, or destination is located. |
currency | The alpha currency code. |
custom_label_0 | The value for a custom label of a product item, hotel, destination, vehicle, home listing, media title, or app. |
custom_label_1 | The value for a custom label of a product item, hotel, destination, vehicle, home listing, media title, or app. |
custom_label_2 | The value for a custom label of a product item, hotel, destination, vehicle, home listing, media title, or app. |
custom_label_3 | The value for a custom label of a product item, hotel, destination, vehicle, home listing, media title, or app. |
custom_label_4 | The value for a custom label of a product item, hotel, destination, vehicle, home listing, media title, or app. |
date_first_on_lot | The date a vehicle first arrived at the dealership in YYYY-MM-DD format. For example, 2018-09-05. |
date_first_on_lot_time | The date and time a vehicle first arrived at the dealership. |
days_on_market | The number of days a home listing has been on the open market. |
dealer_communication_channel | The method which an automobile dealer will use to contact a buyer. LEAD_FORM is subject to regional availability and defaults to CHAT when not available. |
dealer_id | The alphanumeric ID for an automobile dealership. |
dealer_name | The name for the automobile dealership. |
drivetrain | The drivetrain for a vehicle. |
description | The description for a flight, home listing, or destination, media title, or app. |
destination_airport | The IATA code for the destination airport. For example, HKG, LAX, or LHR. |
destination_city | The name of the destination city. For example, London, New York, or Tokyo. |
destination_id | The unique ID for a destination within a catalog. This ID is also used for the content_id parameter in your destination app and pixel events. |
developer | The name of the developer of the app or software. |
director | A director of the production. |
exterior_color | The exterior color for a vehicle. |
featuring | Key individuals involved in the production, such as artists or producers. |
feed_id | The Facebook ID for the feed in which the product belongs. |
flight_id | The unique ID for a flight. |
fuel_type | The type of fuel designated for a vehicle. |
furnish_type | The type of furnishing available for a home listing. |
gender | The gender for the product item. |
genre | The genre or style, such as action, comedy, or puzzle. |
home_listing_id | The unique ID for a home listing. |
hotel_id | The unique ID for a hotel within a catalog. This ID is also used for the content_id parameter in your hotel app and pixel events. |
image_tags | URLs and tags to describe images that are used in ads. Multiple tags can be associated with an image. For example, “Fitness Center”, “Swimming Pool”, or “Parking”. For vehicles, follow this naming convention: (image[0].url, image[0].tag[0], image[0].tag[1]) where the tag value is incremented for each additional tag. When using a CSV/TSV file, use either an image header, image[0].url, image[1].url, and so on, or a JSON flatten string, "[{url:'https://images.com/1.jpg'},{url:'https://images.com/2.jpg'}]". |
interior_color | The interior color for a vehicle. |
listing_type
For Dymanic Ads
enum {for_rent_by_agent, for_rent_by_owner, for_sale_by_agent, for_sale_by_owner, foreclosed, new_construction, new_listing}
For Marketplace
enum {for_rent_by_agent, for_rent_by_owner}
| The type of listing for a home. |
make | The brand of a vehicle. For example, Ford, Toyota, or Kia. |
margin_level | An indicator for the profitability of a hotel from 1 to 10. |
market_id | The market where an offer is eligible. Use for TWO FEED use case, to correspond with the market feed. For regional offers, this field is required and should match the market_id provided in the market feed. For national offers (offers applicable to all of the U.S.), this field should be empty. |
material | The material or fabric that a product is made of such as cotton, denim, or nylon. |
media_category | The content category of the media title. |
mileage_unit | The mileage unit of a vehicle in kilometers or miles. |
mileage_value | The current mileage for a vehicle, in miles or kilometers. For new vehicles, use 0. Vehicles on Marketplace must have over 500 miles or kilometers. |
model | The model for a vehicle such as “Ford Focus” where “Focus” is the model. |
name | The name for a product item, hotel, home listing, destination, media title, or app. |
neighborhood | The neighborhood where a hotel or home listing is located. If there’s more than one neighborhood, add additional columns for each one and use JSON-path syntax in each column name to indicate the number of neighborhoods. |
neighborhood_id | The neighborhood ID for a product item. |
num_baths | The total number of bathrooms for a home listing. Must be 1 at a minimum. |
num_beds | The total number of bedrooms for a home listing. Can be 0 for a studio. |
number_of_raters | The number of people who rated a hotel. |
num_of_valid_guest_rating | Total number ratings for a hotel made by valid guests. |
num_rooms | The total number of rooms for a home listing. |
num_units | The total number of units available in an apartment or condo building. |
offer_type | The type of offer for a home listing or vehicle. |
one_way_price | One-way price for a flight. The currency must be specified, for example, 99.99 USD. |
origin_airport | The IATA code for the airport where the flight originated. |
origin_city | The name of the city where the flight originated. |
pattern | The pattern or graphic print featured on a product. For example, “solid”, “striped”, or “polka dots”. |
postal_code | The postal or zip code for a hotel, home listing, or automobile dealership location. Optional for countries without a postal code system. |
postal_codes | A list of postal codes for a specific market for vehicle offer ads. |
price | The price for a flight, home listing, vehicle, or destination. The currency field is required. |
price_amount | The price multiplied by 100, for all currencies. For example, $4.90USD will be 490 and ¥490JPY will be 49000. |
price_change | The price change for a destination. For example, 0 for no price change, –10 for a 10% price decrease, and 20 for a 20% price increase. |
priority | The priority of a flight or hotel. Values from 0 (lowest priority) to 5 (highest priority). A flight without a value defaults to 0. |
production_company | The production company or studio that created the media title. |
product_expiration_time | The date and time when the product is no longer available. Ads will only fetch products that have not expired. For example, if the expiration date is today, after today this product will no longer appear in ads. |
product_feed_id | The Facebook ID for the product feed for a product item, flight, hotel, home listing, vehicle, vehicle offer, or destination. |
product_group_id | The Facebook ID for the product group of a product item. |
product_item_id | The Facebook ID for a product item. |
product_type | The category for a product item defined by the retailer. |
property_type
For Dynamic Ads
enum {apartment, condo, house, land, manufactured, townhouse, other}
For Marketplace
enum {apartment, builder_floor, condo, house, house_in_condominium, house_in_villa, loft, penthouse, studio, townhouse, other}
| The property type for a home listing. |
rating_system | The rating system used for guest_rating. For example, “Expedia”, or “TripAdvisor”. |
region | The state, county, region, or province for a home listing or automobile dealership. |
region_id | The region ID for the location for a product item or automobile dealership. |
release_date | The release date of the media title in YYYY-MM-DD format. |
release_date_time | The release date and time of the media title. |
retailer_id | The retailer-provided unique identifier for a product item, media title, or app. |
retailer_product_group_id | The ID for a product group defined by the retailer. |
sale_price | The sale price or special price for a vehicle. |
sale_price_amount | The sale price for a product item (same format as price_amount). For hotels, the discounted sale price for a hotel stay, based on checkin_date and length_of_stay. |
score | |
size | The size for a product item such as for clothing or shoes. |
star_rating_float | |
state_of_vehicle | The current state of a vehicle. |
tags | Tags for product organization. |
title | The full name for a vehicle including year, make, model, and trim. Maximum of 500 characters. For example, 2014 Nissan Versa Note S Hatchback 4D. |
transmission | The transmission type for a vehicle. |
trim | The trim for a vehicle: 5DR HB SE Max characters: 50. |
url | The link to an external site where you can view a flight. Deep links specified on the ad level take precedence. |
vehicle_ID | The unique ID for a vehicle. This ID is also used for the content_id parameter in the pixel. If the same ID is used in multiple instances, all instances are ignored. For vehicle offers, it is the ID that advertisers can use to identify an offer. |
vehicle_registration_plate | A metal or plastic plate attached to a motor vehicle or trailer for official identification purposes. For Marketplace, a vehicle registration plate is required in Brazil, France, and the United Kingdom. |
vehicle_type | The type of vehicle. car_truck is the default value. |
vendor_ID | The ID for a vendor. |
videos_fetch_status | The fetch status of associated videos. |
vin | The vehicle identification number. The VIN must be exactly 17 characters and is required in all countries where Marketplace is available with the exception of pre-1983 vehicles. In Brazil, France, and the United Kingdom, a vehicle registration plate is required instead of a VIN. |
visibility | Visibility for a product item. Items in staging mode are not visible to buyers and are not available for product tagging on Instagram or in dynamic ads. |
year | The model year for a vehicle, in YYYY format. |
Operators
Starting March 3, 2022, we changed how certain filters work for product sets. These include the
contains, not_contains, lt, gt, lte, gte, and starts_with filters. You have 90 days to update your filters. If any sets in your catalog are using the affected filters after June 1, 2022, the items in those sets may change. This means that different items could display in your ads or shops that use those sets. See the changelog for more details.| Operator | Type of filter |
|---|---|
and | Returns products that match all query values inclusively. For example, "color": {"red" and "shoe" and "running"} will only return products that match all 3 query values, such as “red running shoe”. |
contains | Returns products that match a query string. For example, category: {"contains": "running shoe"} will return all products that contain the query string, such as “red running shoe”, “blue running shoe”, and “running shoe for kids”. |
or | Returns products that match only one query value exclusively. For example, category: {"running" or "walking"} will return products that match “running” or “walking” but not both. |
not_contains | Returns products that do not match a query string. For example, category: {"not_contains": running shoe"} will return all products that do not contain the query string, such as “red walking shoe”, “sandals”, and “boots”. |
is_any | Returns products that match any value in a list of query values. For example, "color": {"is_any": "black", "blue", "brown"} will return any product that matches at least one query string, such as “black boots”, “blue boots”, “brown boots”. |
is_not_any | Returns products that do not match any value in a list of query strings. For example, "color": {"is_not_any": "black", "blue", "brown"} will return any products that do not match any of the query values, such as “red boots”, “yellow boots”, and “green boots”. |
eq | Returns products that exactly match a query value. For example, "brand": {"eq": "Instagram"} will only match “Instagram” brand products. |
neq | Returns products that do not exactly match a query value. For example, "brand": {"neq": "Instagram"} will only match products that are not “Instagram” brand products. |
lt | Returns products that are less than a numeric query value. For example, "priority": {"lt": 3} will only match products with a priority that is less than 3. |
lte | Returns products that are less than or equal to a numeric query value. For example, "priority": {"lte": 3} will only match products with a priority that is less than or equal to 3. |
gt | Returns products that are greater than a numeric query value. For example, "priority": {"gt": 3} will only match products with a priority that is greater than 3. |
gte | Returns products that are greater than or equal to a numeric query value. For example, "priority": {"gte": 3} will only match products with a priority that is greater than or equal to 3. |
starts_with | Returns products that match any string that starts with the query string. For example, "small" will return any product that starts with the query string, such as “small sandals”, “small t-shirt”, “small, blue boots”. Note: This filter option is now only available for the product category field. For other fields, you should use the contains filter. |
Filter Examples
The following example creates a product set with all products listed in the Luggage & Bags category in the product catalog.
Formatted for readability.curl -i -X POST "https://graph.facebook.com/PRODUCT-CATALOG-ID/product_sets ?name=Product Set Name &filter={'category': {'eq': 'Luggage & Bags'}} &access_token=ACCESS-TOKEN"
The following example creates a product set with all shirts listed the product catalog.
Formatted for readability.curl -i - X POST "https://graph.facebook.com/PRODUCT-CATALOG-ID/product_sets ?name=Product Set Name &filter={'product_type': {'contains': 'shirt'}} &access_token=ACCESS-TOKEN"