Product catalogs and recommendations tools

search_catalogs

Searches the catalogs in a project, or fetches one by ID. Catalogs store product or generic data that's used for recommendations and personalization. Omit catalog_id to list all catalogs — you get summary records: name, display name, type (generic, product, or variant), and metadata. Pass catalog_id to fetch the full definition of a single catalog, including every field's name and data type.

Projects can be on either of two catalog generations, v1 or v2, and this tool covers both. List mode queries the v1 and v2 endpoints at the same time and concatenates the results. A catalog belongs to exactly one generation, so the two sets never overlap and nothing is deduplicated. Every record carries a catalog_version of v1 or v2, which tells you which generation you're looking at and which sibling tools will work against it. Detail mode needs no such handling, because fetching one catalog by ID works the same way for both generations.

Two response patterns are worth knowing. If one generation's endpoint fails while the other answers, success is false and error names the side that failed, for example v1 catalogs: HTTP 500 — but data still holds every catalog the working side returned, so the results are usable even though the call is marked unsuccessful. Separately, if some records fail validation, success stays true and error reports how many were skipped.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
catalog_idstr | nullNoThe catalog ID for direct lookup. Omit to list all; provide to fetch one.

Response parameters

The tool returns a CatalogsResponse when catalog_id is omitted, or a CatalogResponse when it's provided.

The CatalogsResponse object has the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
datalist[CatalogSummary]The catalog summaries.
errorstr | nullError message if the request failed.

The CatalogSummary object has the following fields:

FieldTypeDescription
idstrThe catalog's unique ID.
namestrThe machine-readable catalog name (lowercase with underscores).
display_namestr | nullThe human-readable display name.
descriptionstr | nullA description of the catalog.
typestr | nullThe catalog type: generic, product, or variant.
catalog_versionstr | nullThe catalog generation, v1 or v2. A null value implies v2-era data.
createdany | nullUnix timestamp of when the catalog was created.
created_by_display_namestr | nullDisplay name of the creator.
editedany | nullUnix timestamp of the last edit.
edited_by_display_namestr | nullDisplay name of the last editor.

The CatalogResponse object has the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
dataCatalog | nullThe full catalog definition.
errorstr | nullError message if the request failed.

The Catalog object adds the following field on top of the summary record:

FieldTypeDescription
fieldslist[CatalogFieldDef]The field definitions for this catalog. Each entry has a name, a type (string, number, boolean, date, and so on), and a searchable flag.

search_catalog_items

Searches and lists items inside a catalog. Items are the Elasticsearch-backed records used for recommendations and Search. Each item is returned as a flat dictionary of field values keyed by field name. You can search across all fields or restrict the search to a specific field.

The tool works against both catalog generations. It resolves the catalog's catalog_version once, then queries the matching endpoint, so you don't need to know or pass the generation yourself. The response contract is identical either way: v1 records store the item ID under item_id, and the tool renames it to _id to match v2. If the catalog ID doesn't resolve to a catalog at all, success is false and error reads Catalog '<id>' not found.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
catalog_idstrYesThe catalog ID returned by search_catalogs.
querystrNoSearch text. Defaults to an empty string. When field is not set, the search runs across all fields.
fieldstr | nullNoA specific field name to search within. Omit to search all fields.
skipintNoPagination offset. Defaults to 0.
countintNoNumber of items to return. Defaults to 20. Maximum 1,000.

Response parameters

The tool returns a CatalogItemsResponse object with the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
datalist[dict[str, any]]The catalog items, each as a flat dictionary keyed by field name.
totalintThe total number of items in the catalog.
matchedintThe number of items matching the search query.
limitintThe maximum number of items returned.
skipintThe pagination offset that was applied.
errorstr | nullError message if the request failed.

get_catalog_item

Returns a single item from a catalog by its item ID. The item is returned as a flat dictionary of field values; the item ID is in the _id field. If no item matches, success is false and the response includes an error message.

Like search_catalog_items, this tool resolves the catalog's generation first and queries the v1 or v2 endpoint to match, normalizing a v1 record's item_id to _id so the shape is the same either way. There's no dedicated single-item endpoint behind it. The tool searches the items index on the item_id field and returns the first exact match.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
catalog_idstrYesThe catalog ID returned by search_catalogs.
item_idstrYesThe item's ID, for example A5 or prod-12345.

Response parameters

The tool returns a CatalogItemResponse object with the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
datadict[str, any] | nullThe catalog item fields as a flat dictionary. The item ID is in the _id field.
errorstr | nullError message if the request failed or the item was not found.

get_catalog_configuration

Returns the attribute schema for a catalog: custom attributes the user has defined (with name, type, and the catalog column they map to) and reserved system attributes (such as product_id, title, and price). Also returns a configuration_hash you can use to detect schema drift between snapshots.

Catalog configuration is a v2-only concept. Against a v1 catalog, success is false and error reads Catalog configuration is not available for v1 catalogs. That's a deliberate message rather than the bare 404 the v2 endpoint would otherwise return for a v1 ID, which gave no clue whether the catalog was missing or simply on the older generation. Check catalog_version on the record from search_catalogs if you're unsure which generation a catalog is on.

Separately, the tool returns a 404 if a v2 catalog has no configuration yet, for example because no configuration-update job has run.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
catalog_idstrYesThe catalog ID returned by search_catalogs.

Response parameters

The tool returns a CatalogConfigurationResponse object with the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
dataCatalogConfigurationData | nullThe catalog's attribute schema.
errorstr | nullError message if the request failed.

The CatalogConfigurationData object has the following fields:

FieldTypeDescription
catalog_idstrThe catalog's ID.
project_idstrThe project ID.
configuration_hashstrA SHA256 hash of the configuration. Useful for detecting schema drift between versions.
custom_attribute_definitionslist[CatalogAttributeDefinition]User-defined attribute definitions, sorted alphabetically by name.
reserved_attribute_mappingslist[CatalogAttributeDefinition]System reserved attribute mappings (such as product_id, title, price, and brand), sorted in their standard order.

The CatalogAttributeDefinition object has the following fields:

FieldTypeDescription
namestrThe attribute's name.
record_field_namestrThe catalog record field this attribute maps to.
searchablebool | nullWhether the attribute is included in full-text search.
attribute_value_definitionCatalogAttributeValueDefinitionType information for the attribute.

The CatalogAttributeValueDefinition object has the following fields:

FieldTypeDescription
typestrOne of String, Integer, Float, Boolean, Date, Datetime, List.String, List.Integer, or List.Float.

list_catalog_jobs

Lists the job history for a catalog. Jobs represent data ingestion and update operations: imports, parses, items-updates, configuration-updates, and so on. Useful for checking data freshness or diagnosing upload failures. It covers both standard catalogs, which draw their history from the job database, and item-collection-managed catalogs, which draw from the job reporting service.

Catalog jobs are a v2-only concept. Against a v1 catalog, success is false and error reads Catalog jobs are not available for v1 catalogs, instead of the unexplained 404 a v1 ID used to produce. Check catalog_version on the record from search_catalogs when you need to know which generation you're on.

Job statistics pass through an internal map that keeps the user-facing metrics and drops low-level internal counters.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
catalog_idstrYesThe catalog ID returned by search_catalogs.
skipintNoPagination offset. Defaults to 0.
countintNoNumber of jobs to return. Defaults to 20. Maximum 1,000.

Response parameters

The tool returns a CatalogJobsResponse object with the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
datalist[CatalogJob]The catalog jobs, most recent first.
totalintThe total number of jobs for this catalog.
matchedintThe number of jobs matching the query.
matched_limitedboolWhether the match count was capped by a server limit.
limitintThe maximum number of jobs returned.
skipintThe pagination offset that was applied.
errorstr | nullError message if the request failed.

The CatalogJob object has the following fields:

FieldTypeDescription
idstrThe job's unique ID.
catalog_idstrThe catalog ID.
project_idstrThe project ID.
typestrThe job type: import, parse, download, items-update, configuration-update, or delete-catalog.
statestrThe job state: pending, running, success, fail, or canceled.
status_codeintThe status code: 102 (processing), 200 (success), 210 (success with warnings), 305 (no-op), 310 (skipped), 400 (bad definition), 440 (pre-condition failure), 450 (post-condition failure), 500 (error), or 550 (fatal).
statsdict[str, any]Job statistics such as records_total, items_total, records_added_total, records_deleted_total, items_updated_total, items_deleted_total, feed_total_ops, and feed_total_bytes.
propertiesdict[str, any]Job properties. The shape varies by job type.
logslist[any]Job log entries.
detailslist[any]Job detail messages.
createdstr | nullISO 8601 timestamp of when the job was created.
created_by_idstrThe user ID of the person who created the job.
created_by_display_namestrDisplay name of the job's creator.
editedstr | nullISO 8601 timestamp of the last edit.
startedstr | nullISO 8601 timestamp of when the job started running.
requested_cancelstr | nullISO 8601 timestamp of when cancellation was requested.
runnablestr | nullISO 8601 timestamp of when the job became runnable.

get_catalog_usages

Returns the cross-references for a catalog: which scenarios, recommendation engines, email campaigns, SMS campaigns, banners, experiments, in-app messages, and surveys reference it, plus whether the catalog is used in the project's custom data mapping. Check this before you delete or restructure a catalog.

This works for both catalog generations. The tool resolves the catalog's catalog_version first, then queries the matching endpoint. System scenarios that sit behind email campaigns are stripped from the scenarios list to cut noise, so those campaigns appear under email_campaigns instead.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
catalog_idstrYesThe catalog ID returned by search_catalogs.

Response parameters

The tool returns a CatalogUsagesResponse object with the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
used_byCatalogUsedByCross-references grouped by resource type.
used_by_data_mappingboolWhether the catalog is referenced in the project's custom data mapping.
errorstr | nullError message if the request failed.

The CatalogUsedBy object has the following fields:

FieldTypeDescription
scenarioslist[CatalogUsageEntry]Scenarios using this catalog.
recommendationslist[CatalogUsageEntry]Recommendation engines using this catalog.
email_campaignslist[CatalogUsageEntry]Email campaigns using this catalog.
sms_campaignslist[CatalogUsageEntry]SMS campaigns using this catalog.
bannerslist[CatalogUsageEntry]Weblayer banners using this catalog.
experimentslist[CatalogUsageEntry]A/B experiments using this catalog.
in_app_messageslist[CatalogUsageEntry]In-app messages using this catalog.
surveyslist[CatalogUsageEntry]Surveys using this catalog.
otherlist[CatalogUsageEntry]Other resources using this catalog.

The CatalogUsageEntry object has the following fields:

FieldTypeDescription
idstrThe resource's ID.
namestrThe resource's display name.

search_recommendations

Searches the recommendation engines in a project, or fetches one by ID. Recommendation engines power personalized product suggestions using collaborative filtering, neural models, or rule-based algorithms. Omit recommendation_id to list all engines — you get summary records: name, status, tags, archived flag, and initiative assignment. Pass recommendation_id to fetch the full configuration of a single engine: algorithm type, the catalog it reads from, event mapping, filters, and output settings.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
recommendation_idstr | nullNoThe recommendation engine ID for direct lookup. Omit to list all; provide to fetch one.

Response parameters

The tool returns a RecommendationsResponse when recommendation_id is omitted, or a RecommendationResponse when it's provided.

The RecommendationsResponse object has the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
datalist[RecommendationSummary]The recommendation engine summaries.
errorstr | nullError message if the request failed.

The RecommendationSummary object has the following fields:

FieldTypeDescription
idstrThe recommendation engine's unique ID.
namestrThe engine's display name.
statusstrOne of draft, active, or inactive.
archivedboolWhether the engine has been archived.
tagslist[str]User-defined tags.
initiative_idstr | nullThe initiative this engine belongs to, if any.
createdany | nullUnix timestamp of when the engine was created.
created_by_display_namestr | nullDisplay name of the creator.
editedany | nullUnix timestamp of the last edit.
edited_by_display_namestr | nullDisplay name of the last editor.

The RecommendationResponse object has the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
dataRecommendation | nullThe full engine definition.
errorstr | nullError message if the request failed.

The Recommendation object adds the following field on top of the summary record:

FieldTypeDescription
definitionany | nullThe engine configuration: model type (collaborative filtering, neural, or rule-based), the catalog, event mapping, filters, and output settings.

get_customer_recommendations

Runs a recommendation engine for a single customer and returns the ranked list of products the engine suggests. Use it to check what an engine actually recommends for a named customer, for example to sanity-check results after a catalog update, or to compare two engines on the same customer.

This tool invokes the engine but doesn't change its definition, and it never tracks impression events, so the calls are diagnostic. Identify the engine with engine_id from search_recommendations, and identify the customer with customer_id plus its id_type. The customer_id is an external identifier, not the internal customer ID used by other customer tools.

This tool is in alpha, so its API or response shape may change.

Request parameters

NameTypeRequired?Description
project_idstrYesThe project ID returned by list_projects.
engine_idstrYesThe recommendation engine ID to run, returned by search_recommendations.
customer_idstrYesThe customer's external identifier value, for example user-1234 or [email protected]. This is an external ID, not the internal customer ID used by other tools.
id_typestrNoThe external identifier type that customer_id belongs to, as defined on the project, for example registered, email, or cookie. Defaults to registered.
sizeintNoThe maximum number of items to return. Defaults to 10. Range 1–100.
strategystrNoOverrides the engine's strategy: winner, mix, or priority. Omit to use the engine's configured strategy.
diversity_levelintNoThe diversity tuning level from 1 (least diverse) to 5 (most diverse). Omit to use the engine default.
use_casestrNoThe recommendation use-case preset, for example homepage, product_detail_page, or email_abandoned_cart. Omit to use the engine default.

Response parameters

The tool returns a CustomerRecommendationsResponse object with the following parameters:

ParameterTypeDescription
successboolWhether the request succeeded.
datalist[RecommendedItem]The ranked list of recommended catalog items for the customer.
errorstr | nullError message if the request failed.

The RecommendedItem object has the following fields:

FieldTypeDescription
item_idstrThe catalog item ID of the recommended product.
product_idstr | nullThe product ID. Defaults to item_id when it isn't present in the catalog properties.
recommendation_idstr | nullThe ID of the recommendation engine that produced this item.
recommendation_variant_idstr | nullThe A/B test variant ID, if the engine is under experiment.
engine_namestr | nullThe name of the model or sub-engine that selected this item, for example cf, random, custom, or pinned.
recommendation_sourcestr | nullHow the item was chosen: model_personalized, model_non_personalized, model_fallback, fallback, pinned, or pinned_adjusted.

Each item also passes through any additional catalog attributes, such as title, image, and price, flattened alongside the fields above.



Did this page help you?

© Bloomreach, Inc. All rights reserved.