Create and manage a catalog via a feed, with your feed you can:
Pinterest supports feeds for products, hotel inventory, and creative assets. A feed is a file that lists items and their attributes. More details about feeds:
They may be referred to as a product feed, data source, or catalog feed.
You can have up to 50 feeds.
Pinterest ingests your feed every 24 to 48 hours to update your entire catalog.
Catalog management supports Business access permissions. Review our guide on using
Business access with the API to ensure you can complete requests and avoid getting authorization errors.
Get a list of owned feeds.
Specify an
if using
business access.
is not needed if operating on your own account.
Use
if you'd like to filter for a given catalog ID. If not given, all catalogs are returned.
This example request returns:
GET /v5/catalogs/feeds?page_size=15
{
"items": [
// a list of feeds and their attributes
{
"country": "US",
"default_availability": "IN_STOCK",
"default_currency": "USD",
"name": "string",
"format": "TSV",
"default_locale": "en_US",
"credentials": {
"password": "pa$$word",
"username": "string"
},
"location": "string",
"preferred_processing_schedule": {
"time": "02:59",
"timezone": "Africa/Abidjan"
},
"created_at": "2019-08-24T14:15:22Z",
"id": "string",
"updated_at": "2019-08-24T14:15:22Z",
"status": "ACTIVE",
"catalog_type": "RETAIL"
}
],
"bookmark": "string"
}
Get a single feed by making a request to . GET /v5/catalogs/feeds/{feed_id}
{
"country": "US",
"default_availability": "IN_STOCK",
"default_currency": "USD",
"name": "string",
"format": "TSV",
"default_locale": "en_US",
"credentials": {
"password": "pa$$word",
"username": "string"
},
"location": "string",
"preferred_processing_schedule": {
"time": "02:59",
"timezone": "Africa/Abidjan"
},
"created_at": "2019-08-24T14:15:22Z",
"id": "string",
"updated_at": "2019-08-24T14:15:22Z",
"status": "ACTIVE",
"catalog_type": "RETAIL"
}
Create a new feed by making a request to . {
"country": "US",
"default_availability": "IN_STOCK",
"default_currency": "USD",
"name": "string",
"format": "TSV",
"locale": "en_US",
"credentials": {
"password": "pa$$word",
"username": "string"
},
"location": "string",
"preferred_processing_schedule": {
"time": "02:59",
"timezone": "Africa/Abidjan"
}
}
POST requests must have a body. Include in the request body all the required feed information.
This example passes the name and location of the file to be used as the catalog feed, as well as specifies the processing schedule and access credentials.
A successful response returns the for the newly created feed. {
"country": "US",
"default_availability": "IN_STOCK",
"default_currency": "USD",
"name": "string",
"format": "TSV",
"default_locale": "en_US",
"credentials": {
"password": "pa$$word",
"username": "string"
},
"location": "string",
"preferred_processing_schedule": {
"time": "02:59",
"timezone": "Africa/Abidjan"
},
"created_at": "2019-08-24T14:15:22Z",
"id": "string",
"updated_at": "2019-08-24T14:15:22Z",
"status": "ACTIVE",
"catalog_type": "RETAIL"
}
Feed information that was part of the request
Date and time when the feed was created
Date and time of any update (for a new feed, this will be the same as the date and time created)
Status of the feed
The values returned should match the values submitted except for and . Update an existing feed owned by the operating user_account by calling . In this example, the request is updating the and preferred_processing_schedule
. {
"default_availability": "IN_STOCK",
"default_currency": "USD",
"name": "string",
"format": "TSV",
"credentials": {
"password": "pa$$word",
"username": "string"
},
"location": "string",
"preferred_processing_schedule": {
"time": "02:59",
"timezone": "Africa/Abidjan"
}
}
A successful response will return all of the feed's updated information, including details which weren't changed in the request.
{
"country": "US",
"default_availability": "IN_STOCK",
"default_currency": "USD",
"name": "string",
"format": "TSV",
"default_locale": "en_US",
"credentials": {
"password": "pa$$word",
"username": "string"
},
"location": "string",
"preferred_processing_schedule": {
"time": "02:59",
"timezone": "Africa/Abidjan"
},
"created_at": "2019-08-24T14:15:22Z",
"id": "string",
"updated_at": "2019-08-25T14:35:53Z",
"status": "ACTIVE",
"catalog_type": "RETAIL"
}
If the operation user_account does not have permission to create the feed, you'll receive a 403 authorization error with code of 2625.
If the
provided in the request is invalid, you'll receive a 404 error with a 4161 code.
Invalid requests will receive a 400 error.
Make a request to to remove an owned feed. DELETE /v5/catalogs/feeds/(feed_id)
Response: 204 Feed deleted successfully.
If the operating user_account does not have permission to delete the feed, you'll receive a 403 authorization error with a 2625 code.
If the
is invalid, you'll receive a 404 error with a 4161 code.
If the feed you are attempting to delete includes a product group with active promotions, you'll receive a 409 error with a code of 4162.
List processing results for a feed
Check the processing status of a feed by making a request to . The user token must have the scope. GET /v5/catalogs/feeds/{feed_id}/processing_results
The response will include the following details:
Ingestion details such as:
Image download error
Image download connection timeout
Image format unrecognized
Line level internal error, and/or indexed product count large delta failure
Info counts for in stock, out of stock, preorder, and unavailable items
Ingestion status
Product counts or the number of items in the feed before processing
Validation details including errors and warnings
{
"items": [
{
"created_at": "2019-08-24T14:15:22Z",
"id": "string",
"updated_at": "2019-08-24T14:15:22Z",
"ingestion_details": {
"errors": {
"image_download_error": 0,
"image_download_connection_timeout": 0,
"image_format_unrecognize": 0,
"line_level_internal_error": 0,
"indexed_product_count_large_delta_failure": 0
},
"info": {
"in_stock": 0,
"out_of_stock": 0,
"preorder": 0,
"unavailable": 0
}
},
"status": "COMPLETED",
"product_counts": {
"original": 0
},
"validation_details": {
"errors": {
"fetch_error": 0,
"fetch_inactive_feed_error": 0,
"encoding_error": 0,
"delimiter_error": 0,
"required_columns_missing": 0,
"image_link_invalid": 0,
"itemid_missing": 0,
"title_missing": 0,
"description_missing": 0,
"product_category_invalid": 0,
"product_link_missing": 0,
"image_link_missing": 0,
"availability_invalid": 0,
"product_price_invalid": 0,
"link_format_invalid": 0,
"parse_line_error": 0,
"adwords_format_invalid": 0,
"product_category_missing": 0,
"internal_service_error": 0,
"no_verified_domain": 0,
"adult_invalid": 0,
"invalid_domain": 0,
"feed_length_too_long": 0,
"link_length_too_long": 0,
"malformed_xml": 0,
"redirect_invalid": 0,
"price_missing": 0,
"feed_too_small": 0,
"condition_invalid": 0,
"shopify_no_products": 0,
"max_items_per_item_group_exceeded": 0,
"item_main_image_download_failure": 0,
"pinjoin_content_unsafe": 0,
"blocklisted_image_signature": 0
},
"warnings": {
"title_length_too_long": 0,
"description_length_too_long": 0,
"gender_invalid": 0,
"age_group_invalid": 0,
"size_type_invalid": 0,
"link_format_warning": 0,
"duplicate_products": 0,
"duplicate_links": 0,
"sales_price_invalid": 0,
"product_category_depth_warning": 0,
"adwords_same_as_link": 0,
"duplicate_headers": 0,
"fetch_same_signature": 0,
"adwords_format_warning": 0,
"additional_image_link_warning": 0,
"image_link_warning": 0,
"shipping_invalid": 0,
"tax_invalid": 0,
"shipping_weight_invalid": 0,
"expiration_date_invalid": 0,
"availability_date_invalid": 0,
"sale_date_invalid": 0,
"weight_unit_invalid": 0,
"is_bundle_invalid": 0,
"updated_time_invalid": 0,
"custom_label_length_too_long": 0,
"product_type_length_too_long": 0,
"too_many_additional_image_links": 0,
"multipack_invalid": 0,
"indexed_product_count_large_delta": 0,
"item_additional_image_download_failure": 0,
"optional_product_category_missing": 0,
"optional_product_category_invalid": 0,
"optional_condition_missing": 0,
"optional_condition_invalid": 0,
"ios_deep_link_invalid": 0,
"android_deep_link_invalid": 0,
"availability_normalized": 0,
"condition_normalized": 0,
"gender_normalized": 0,
"size_type_normalized": 0,
"age_group_normalized": 0,
"utm_source_auto_corrected": 0,
"country_does_not_map_to_currency": 0,
"min_ad_price_invalid": 0
}
}
}
],
"bookmark": "string"
}
If the operating user_account does not have permission to access the feed, you'll receive an authorization error 403 with a 29 code
If the feed_id is invalid, you'll receive a 404 error with a 4161 code
If the request includes a parameter error, such as page_size is invalid, you'll receive a 400 error with information on the bad parameter.
Trigger an ingestion on demand for a given feed
Manually trigger the ingestion of a feed by making a request to . This will start the ingestion automatically unless there is already an ongoing ingestion or if the daily trigger ingestion limit is reached. Utilize this request when you would like to update your feed on your own cadence or you cannot wait for the next scheduled update. POST https://api.pinterest.com/v5/catalogs/feeds/{feed_id}/ingest
Feed parameters and attributes
bookmark: Value returned with a paginated request, to be used to request the next page of results.
country: ISO code for the feed's country.
created_at: Timestamp of when the feed was created.
credentials: Object containing the username and password required to access the data source for the feed.
default_availability: Value for items in this feed that do not have availability specified.
default_currency: Default value for currency of items in this feed that do not have currency specified, using the ISO currency codes.
feed_id: Unique identifier for the feed, returned when a new feed is created.
format: Format of the data source for the feed: TSV, CSV, or XML.
ingestion_details: List and count of errors, such as download, connection, or format errors and info on the number of items that are in stock, out of stock, preorder, or unavailable.
locale: ISO locale code to use for this feed.
location: Where the data source can be accessed by Pinterest for ingestion.
name: Name of the feed.
page_size: Number of items to return per page if a list is requested.
password: Include the password if credentials are required in the credentials object.
preferred_processing_schedule: Object that includes the preferred processing start time and timezone for the feed.
product counts: Object that includes the original product count and how many valid products Pinterest found in the feed that you sent us.
status: Status of the feed.
updated_at: Timestamp for the most recent feed update.
username: Include the username if credentials are required in the credentials object.
validation_details: Object that includes a list and count of errors and warnings that were returned during ingestion.