Product Catalog Search API

concept brazil Updated Sep 10, 2026 15 min read product-catalog-search-api.md
Raw file servicenow.com

The Product Catalog Search API searches the product catalog and retrieves the eligible catalog-category hierarchy for a given context. Search supports multiple catalog types, with paginated and sortable results.

The Product Catalog Search API provides the ability to:

  • Search products by search term across one or all catalogs and across one or all categories within a catalog.
  • Retrieve the eligible catalog-category hierarchy for a context, with ineligible catalogs and categories filtered out.
  • Filter results by catalog, category, and catalog type (defaults to Product Offering).
  • Supply a header context object to apply account-specific pricing, price lists, currency, channel, shipping/billing address, and sales agreement to search results.
  • Page through result sets using a zero-based page index and page limit.
  • Control sort order and sort field (for example, by relevance score).
  • Optionally pass an AI Search suggestion ID to support AI-assisted search flows.

This API delegates all data retrieval to the existing script include, ensuring consistent behavior between the UI and the REST interface. Endpoints are independent and can be called individually. There is no required call order and no dependency on other APIs.

The CatalogSearchAPI - Scoped, Global wraps this REST API.

Requirements

This API is included in the Product Catalog Management Core application, which is available on the ServiceNow Store.

This API is provided within the sn_prd_pm namespace and requires the Product Catalog Management Core plugin (sn_prd_pm) to access it.

The calling user must have the sn_prd_pm.product_catalog_viewer or sn_prd_pm.external_product_viewer roles.

Parent Topic:REST API reference

Product Catalog Search - POST /api/sn_prd_pm/catalog/search

Searches the product catalog and returns a paginated list of products that match the supplied search parameters.

Use this endpoint whenever an external application or agent needs to retrieve products from the catalog. For example, to populate a shopping interface, drive an AI recommendation flow, or validate catalog availability. The endpoint delegates to the existing script include entry point and supports the same context-aware pricing and eligibility logic available in the Product Catalog UI.

Additional usage notes

  • If headerContext is provided only with account but other context values such as pricelist, currency aren't provided, they are automatically fetched based on the given account to evaluate eligibility rules.
  • If user has their own context variables for eligibility, those can be passed in headerContext.
  • If headerContext isn't provided, the currency will default to the system currency and standard price list.
  • Pass sortOrder, sortBy and aiSearchSuggestionId request parameters only if AI Search + RAG setup for product catalog search is done on the instance.

URL format

Base URL: /api/sn_prd_pm/{api_version}/catalog/search

Supported request parameters

Name

Description

api_version

Required. Version of the endpoint to access. Valid value: v1.

Requests made without the version fails with a "Requested URI doesn't represent any resource" error.

Data type: String

|Name|Description| |----|-----------| |None| |

Name

Description

aiSearchSuggestionId

Sys_id of an AI Search suggestion record to associate with this search request. Used to support AI-assisted search flows.Data type: String

Default: empty string

catalogType

Type of catalog items to search. Case-sensitive.Valid values:

  • PRODUCT_OFFERING: Fetch product offerings.
  • SERVICE_SPECIFICATION: Fetch service specifications.

Data type: String

headerContext

Context object that controls pricing, eligibility, and localization applied to search results. When omitted, the API derives context from the account if one is provided.Data type: Object

JavaScript
"headerContext": {      "account": "String",      "currency": "String",      "billing_city": "String",      "billing_country": "String",      "billing_location": "String",      "billing_state": "String",      "billing_street": "String",      "billing_zip": "String",      "pricelist": "String",      "sales_agreement": "String",      "shipping_city": "String",      "shipping_country": "String",      "shipping_location": "String",      "shipping_state": "String",      "shipping_street": "String",      "shipping_zip": "String",      "suppressPricing": String,      "transaction_date": "String"    }

headerContext.account

Sys_id of the account to use for context resolution. When provided and other context fields are omitted, pricing and eligibility are resolved from the account.Data type: String

headerContext.billing_city

City for the billing address. Data type: String

headerContext.billing_country

Country for the billing address. Example: USAData type: String

headerContext.billing_location

Sys_id of the billing location record.Table: Location [location]

Data type: String

headerContext.billing_state

State or province for the billing address. Example: TXData type: String

headerContext.billing_street

Street address for billing.Data type: String

headerContext.billing_zip

Postal code for the billing address. Example: 75254-7536Data type: String

headerContext.currency

Currency code to use for pricing. Example: USD.Data type: String

Default: Derived from account if not supplied. If account not provided, resolves to system currency.

headerContext.pricelist

Sys_id of the price list to apply.Table: Pricing List [sn_csm_pricing_price_list]

Default: Derived from account if not supplied.

Data type: String

headerContext.sales_agreement

Sys_id of the sales agreement to apply.Table: Sales Agreement [sn_sales_agmt_core_sales_agreement]

Data type: String

headerContext.shipping_city

City for the shipping address. Data type: String

headerContext.shipping_country

Country for the shipping address. Example: USAData type: String

headerContext.shipping_location

Sys_id of the shipping location record.Table: Location [location]

Data type: String

headerContext.shipping_state

State or province for the shipping address. Example: TXData type: String

headerContext.shipping_street

Street address for shipping. Data type: String

headerContext.shipping_zip

Postal code for the shipping address. Example: 75254-7536Data type: String

headerContext.suppressPricing

Optional. Flag that indicates whether to suppress pricing information in the response. Valid values:

  • true: Pricing is suppressed.
  • false: Pricing is included.

Data type: Boolean

Default: false

headerContext.transaction_date

Date and time of the transaction.Format: yyyy-MM-dd HH:mm:ss (Example: 2026-03-30 20:20:08)

Data type: String

pageIndex

Zero-based index of the page of results to return. Data type: Number (integer)

Minimum value: 0

Default: 0

pageLimit

Number of search results per page.Data type: Number

Default: 10

searchTerm

Keyword or phrase to search for in the product catalog. When null or empty, returns all products in the specified catalog.Data type: String

Default: null

selectedCatalog

Sys_id of the catalog to search. Table: Product Offering Catalog [sn_prd_pm_product_offering_catalog]

Data type: String

Default: “allCatalog” (searches across all catalogs)

selectedCategory

Sys_id of the category to filter results by. If providing this value, you must pass the selectedCatalog to which that particular category belongs to.Table: Product Offering Category [sn_prd_pm_product_offering_category]

Data type: String

Default: “showAll” (returns results from all categories within the catalog)

sortBy

Field to sort results by. Accepted values are dependent on the value of catalogType.Valid values:

  • PRODUCT_OFFERING:
    • code
    • description
    • display_name
    • name
    • score
  • For SERVICE_SPECIFICATION:
    • description
    • display_name
    • name
    • score
    • specification_code

Data type: String

sortOrder

Sort direction for results.Valid values:

  • ascending
  • descending

Data type: String

Default: descending

### Headers

The following request and response headers apply to this HTTP action only, or apply to this action in a distinct way. For a list of general headers used in the REST API, see Supported REST API headers.

Header Description
Accept Media type accepted by the client. Set to application/json.
Content-Type Media type of the request body. Set to application/json.
Authorization Access to the instance. (OOB default ACL for scripted REST execute)
Header Description
None

Status codes

The following status codes apply to this HTTP action. For a list of possible status codes used in the REST API, see REST API HTTP response codes.

Status code Description
200 OK. The search completed successfully. The response body contains the paginated list of matching products.
401 Unauthorized. The calling user isn't authenticated.
403 Forbidden. The calling user doesn't have the sn_prd_pm.product_catalog_viewer or sn_prd_pm.external_product_viewer role required to access this endpoint.
500 Internal Server Error. Custom message - “The request couldn't be processed due to an internal server error. Please retry later."

Response body parameters (JSON or XML)

Name

Description

count

Number of product offerings in the response array.Data type: Number

leafCategoryList

A comma-separated string of eligible leaf category sys_ids used to filter product offerings, derived from the selected catalog and category hierarchy. Only included in the output when not already provided in the input filter.

Data type: String

response

An array matching the current filter criteria, including search terms, selected category, and eligibility rules.Data type: Array of Objects

CSS
"response": [ {   "code": {Object},   "description": {Object},   "listPrice": "String",   "name": {Object},   "offerType": {Object},   "offerTypeVariation": "String",   "priceList": "String",   "pricingMethod": "String",   "productOfferingFamily": {Object},   "productOfferingSysId": {Object},   "uom": {Object} }]

response.code

Product offering code.Data type: Object

CSS
"code": {  "value": "String",  "displayValue": "String"}

response.code.displayValue

Display value of the field.Data type: String

response.code.value

Stored (raw) value of the field.Data type: String

response.derivedPrice

Flag that indicates whether the product's price is calculated dynamically based on related products, product characteristics, or predefined pricing rules rather than having a fixed catalog list price.Valid values:

  • true: Product's price is calculated dynamically.
  • false: Product's price is calculated using a fixed catalog list price.

Data type: Boolean

response.description

Details about the product offering.Data type: Object

Text
"description": {  "value": "String",  "displayValue": "String"}

response.description.displayValue

Display value of the field.Data type: String

response.description.value

Stored (raw) value of the field.Data type: String

response.items.semanticSimilarity

Relevance or semantic score assigned to this result by the AI search engine. Field is absent from non-AI Search responses.Data type: Number

response.listPrice

Formatted list price of the product offering (for example, "$50.00"). May be absent if no price is configured.Data type: String

response.name

Display name of the product offering.Data type: Object

Text
"name": {  "value": "String",  "displayValue": "String"}

response.name.displayValue

Display value of the field.Data type: String

response.name.value

Stored (raw) value of the field.Data type: String

response.offerType

Type of the product offering (for example, simple, config, or simple_with_spec).Data type: Object

Text
"offerType": {  "value": "String",  "displayValue": "String"}

response.offerType.displayValue

Display value of the field.Data type: String

response.offerType.value

Stored (raw) value of the field.Data type: String

response.offerTypeVariation

Variation type of the offering, typically matching offerType.Data type: String

response.priceList

Sys_id of the associated price list record. May be absent if no price list is assigned.Data type: String

response.pricingMethod

Pricing method for the offering.Possible values:

  • one_time
  • recurring

Data type: String

response.productOfferingFamily

Product offering family to which the offering belongs to.Data type: Object

Text
"productOfferingFamily": {    "value": "String",    "displayValue": "String"}

response.productOfferingFamily.displayValue

Display value of the field.Data type: String

response.productOfferingFamily.value

Stored (raw) value of the field.Data type: String

response.productOfferingSysId

List containing the sys_id(s) of the product offering record(s).Data type: Object

Text
"productOfferingSysId": {  "value": "String",  "displayValue": "String"}

response.productOfferingSysId.displayValue

Display value of the field.Data type: String

response.productOfferingSysId.value

Stored (raw) value of the field.Data type: String

response.uom

Unit of measure for the offering.Data type: Object

Text
"uom": {  "sysId": "String",  "name": "String"}

response.uom.name

Display name of the unit of measure (for example, Each).Data type: String

response.uom.sys_id

Sys_id of the unit-of-measure record.Data type: String

response.visual

URL to the product offering's image/thumbnail, if configured and if sn_prd_pm.show_product_visuals system property is enabled.Data type: String

selectedCatalogHierarchy

List of all eligible catalog objects when no default catalog is configured and "All Catalogs" is the selected view.Data type: Array of Objects

JSON
"selectedCatalogHierarchy": [  {   "id": "String",   "label": "String",   "children": []   }]

selectedCatalogHierarchy.children

Child category nodes. Dependent on the value set for selectedCategory in the request:

  • Value is empty or showAll (default): Returns an empty array ([]) when there are no children; the showAll node returns an empty object ({}).
  • Value is a sys_id: Returns the child sys ID, display value, and any nested children associated with the given category sys_id.

Data type: Object or Array

JavaScript
//'selectedCategory' is 'showAll'
{  "id": "showAll",  "label": "Show all",  "children": {}}
JavaScript
//'selectedCategory' is sys_id
{"id": "String","label": "String","children": [ {  "id": "String",  "label": "String",  "children": [Array] }]}

selectedCatalogHierarchy.id

Category identifier. A sys_id for catalog categories, or the literal showAll for the "Show all" option.Data type: String

selectedCatalogHierarchy.label

Display name of the category.Data type: String

spellCorrectedTerm

Spell-corrected version of the search term, returned when AI Search + RAG is enabled and a correction is available. Field is absent from non-AI Search responses.Data type: String

suggestedRecordDisplayName

Display name of a suggested record, returned when AI Search + RAG is enabled and a direct match suggestion exists.Data type: String

### cURL request

The following example searches for offerings matching the term 'modem' within a specific catalog and category, with an account context for pricing and eligibility.

Shell
curl "https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/search" \ --request POST \ --header "Accept:application/json" \ --header "Content-Type:application/json" \ --data "{\"searchTerm\":\"modem\",\"selectedCatalog\":\"eaf0159fd0a63110f8770dbf976be178\",\"selectedCategory\":\"e6f0159fd0a63110f8770dbf976be18c\",\"headerContext\":{\"account\":\"ffc68911c35420105252716b7d40dd55\"}}" \ --user 'username':'password'

Response body.

JSON
{  "selectedCatalogHierarchy": [    { "id": "showAll", "label": "Show all", "children": {} },    { "id": "eaf0159fd0a63110f8770dbf976be18a", "label": "Connected Car", "children": [] },    { "id": "7e6d2c02742e4a10f877468e695efae1", "label": "Connectivity Services", "children": [] },    { "id": "aef0159fd0a63110f8770dbf976be185", "label": "Elevators", "children": [] },    { "id": "50605f1a49e0b210f8777676c00265b6", "label": "Enterprise SaaS Solutions", "children": [] },    { "id": "6ef0159fd0a63110f8770dbf976be189", "label": "Home Automation", "children": [] },    { "id": "e6f0159fd0a63110f8770dbf976be18c", "label": "Internet", "children": [] },    { "id": "6af0159fd0a63110f8770dbf976be18b", "label": "MultiPlay", "children": [] },    { "id": "eef0159fd0a63110f8770dbf976be188", "label": "OTT", "children": [] },    { "id": "8eb87bb3ff1ef61081adffffffffff53", "label": "Solana US Catalog_all_offers", "children": [] }  ],  "leafCategoryList": "e6f0159fd0a63110f8770dbf976be18c",  "response": [    {      "productOfferingSysId": {        "value": "0b61dd9fd0a63110f8770dbf976be171",        "displayValue": "0b61dd9fd0a63110f8770dbf976be171"      },      "code": {        "value": "SOLANAMODE2",        "displayValue": "SOLANAMODE2"      },      "name": {        "value": "Solana Modem M Series",        "displayValue": "Solana Modem M Series"      },      "description": {        "value": "Solana Modem M Series",        "displayValue": "Solana Modem M Series"      },      "offerType": {        "value": "simple",        "displayValue": "simple"      },      "productOfferingFamily": {        "value": "d41a8f7b2c5e4110f877a3be976be1c4",        "displayValue": "Broadband Equipment"      },      "pricingMethod": "one_time",      "uom": {        "sysId": "cb2795d553020110286eddeeff7b12ff",        "name": "Each"      },      "offerTypeVariation": "simple",      "listPrice": "$130.00",      "priceList": "19d29513d0e63110f8770dbf976be122"    },    {      "productOfferingSysId": {        "value": "0761dd9fd0a63110f8770dbf976be173",        "displayValue": "0761dd9fd0a63110f8770dbf976be173"      },      "code": {        "value": "SOLANAMODE1",        "displayValue": "SOLANAMODE1"      },      "name": {        "value": "Solana Modem N Series",        "displayValue": "Solana Modem N Series"      },      "description": {        "value": "The Solana Modem N Series is engineered to deliver exceptional performance, reliability, and seamless connectivity for both residential and business environments. Designed for users who demand high-speed internet, the N Series modem offers cutting-edge technology that supports the latest broadband standards, providing a robust solution for all your data needs.   Technical Specifications Modem Type: - Cable Modem (DOCSIS 3.1) - Wi-Fi Standards: 802.11ac (Dual-Band) - Ethernet Ports: 4x Gigabit Ethernet Ports - Wi-Fi Range: Up to 1500 sq. ft. (coverage may vary based on environment) - Speed: Supports up to [Insert Maximum Speed] ",        "displayValue": "The Solana Modem N Series is engineered to deliver exceptional performance, reliability, and seamless connectivity for both residential and business environments. Designed for users who demand high-speed internet, the N Series modem offers cutting-edge technology that supports the latest broadband standards, providing a robust solution for all your data needs.   Technical Specifications Modem Type: - Cable Modem (DOCSIS 3.1) - Wi-Fi Standards: 802.11ac (Dual-Band) - Ethernet Ports: 4x Gigabit Ethernet Ports - Wi-Fi Range: Up to 1500 sq. ft. (coverage may vary based on environment) - Speed: Supports up to [Insert Maximum Speed] "      },      "offerType": {        "value": "simple",        "displayValue": "simple"      },      "productOfferingFamily": {        "value": "d41a8f7b2c5e4110f877a3be976be1c4",        "displayValue": "Broadband Equipment"      },      "pricingMethod": "one_time",      "uom": {        "sysId": "cb2795d553020110286eddeeff7b12ff",        "name": "Each"      },      "offerTypeVariation": "simple",      "listPrice": "$120.00",      "priceList": "19d29513d0e63110f8770dbf976be122"    }  ],  "count": 2}

cURL request

The following example searches for service specifications matching the term “firewall service”.

Shell
curl "https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/search" \ --request POST \ --header "Accept:application/json" \ --header "Content-Type:application/json" \ --data "{\"searchTerm\":\"firewall service\", \"catalogType\":\"SERVICE_SPECIFICATION\"}" \ --user 'admin':'admin'

Response body.

JSON
{  "response": [    {      "productOfferingSysId": {        "value": "f99546ff07266010a7955b7e0ad300a8",        "displayValue": "f99546ff07266010a7955b7e0ad300a8"      },      "code": {        "value": "MANAGEDFIREWALLSERVICE",        "displayValue": "MANAGEDFIREWALLSERVICE"      },      "name": {        "value": "Managed Firewall Service",        "displayValue": "Managed Firewall Service"      },      "description": {        "value": "Managed Firewall Service",        "displayValue": "Managed Firewall Service"      },      "offerType": {        "value": "config",        "displayValue": "config"      }    },    {      "productOfferingSysId": {        "value": "52c6b30d773301108b2a1e599a5a9954",        "displayValue": "52c6b30d773301108b2a1e599a5a9954"      },      "code": {        "value": "MANAGEDFIREWALLSERVICEV2",        "displayValue": "MANAGEDFIREWALLSERVICEV2"      },      "name": {        "value": "Managed Firewall Service v2",        "displayValue": "Managed Firewall Service v2"      },      "description": {        "value": "Managed Firewall Service",        "displayValue": "Managed Firewall Service"      },      "offerType": {        "value": "config",        "displayValue": "config"      }    },    {      "productOfferingSysId": {        "value": "35d077304f3e1110b915b2e76e72e06e",        "displayValue": "35d077304f3e1110b915b2e76e72e06e"      },      "code": {        "value": "MANAGEDFIREWALLSERVICEV3",        "displayValue": "MANAGEDFIREWALLSERVICEV3"      },      "name": {        "value": "Managed Firewall Service v3",        "displayValue": "Managed Firewall Service v3"      },      "description": {        "value": "Managed Firewall Service",        "displayValue": "Managed Firewall Service"      },      "offerType": {        "value": "config",        "displayValue": "config"      }    },    {      "productOfferingSysId": {        "value": "14735356775131108e191e599a5a99c9",        "displayValue": "14735356775131108e191e599a5a99c9"      },      "code": {        "value": "MANAGEDFIREWALLSERVICEV4",        "displayValue": "MANAGEDFIREWALLSERVICEV4"      },      "name": {        "value": "Managed Firewall Service v4",        "displayValue": "Managed Firewall Service v4"      },      "description": {        "value": "Managed Firewall Service",        "displayValue": "Managed Firewall Service"      },      "offerType": {        "value": "config",        "displayValue": "config"      }    }  ],  "count": 4}

cURL request

The following example performs a search request using the full set of parameters and a complete header context.

Shell
curl "https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/search" \  --request POST \  --header "Accept: application/json" \  --header "Content-Type: application/json" \  --user 'username:password' \  --data '{    "searchTerm": "sensor",    "selectedCatalog": "eaf0159fd0a63110f8770dbf976be178",    "selectedCategory": "6ef0159fd0a63110f8770dbf976be189",    "pageIndex": 0,    "pageLimit": 10,    "catalogType": "PRODUCT_OFFERING",    "sortOrder": "descending",    "sortBy": "score",    "aiSearchSuggestionId": "",    "headerContext": {      "account": "ffc68911c35420105252716b7d40dd55",      "pricelist": "19d29513d0e63110f8770dbf976be122",      "currency": "USD",      "suppressPricing": false,      "transaction_date": "2026-03-30 20:20:08",      "shipping_city": "Dallas",      "shipping_country": "USA",      "shipping_location": "25aba2ed0a0a0bb300b69ce49ae72211",      "shipping_state": "TX",      "shipping_street": "13770 Noel Road, Dallas",      "shipping_zip": "75254-7536",      "billing_city": "Dallas",      "billing_country": "USA",      "billing_location": "25aba2ed0a0a0bb300b69ce49ae72211",      "billing_state": "TX",      "billing_street": "13770 Noel Road, Dallas",      "billing_zip": "75254-7536",      "sales_agreement": ""    }  }'

Response body.

JSON
{  "selectedCatalogHierarchy": [    { "id": "showAll", "label": "Show all", "children": {} },    { "id": "eaf0159fd0a63110f8770dbf976be18a", "label": "Connected Car", "children": [] },    { "id": "7e6d2c02742e4a10f877468e695efae1", "label": "Connectivity Services", "children": [] },    { "id": "aef0159fd0a63110f8770dbf976be185", "label": "Elevators", "children": [] },    { "id": "50605f1a49e0b210f8777676c00265b6", "label": "Enterprise SaaS Solutions", "children": [] },    { "id": "6ef0159fd0a63110f8770dbf976be189", "label": "Home Automation", "children": [] },    { "id": "e6f0159fd0a63110f8770dbf976be18c", "label": "Internet", "children": [] },    { "id": "6af0159fd0a63110f8770dbf976be18b", "label": "MultiPlay", "children": [] },    { "id": "eef0159fd0a63110f8770dbf976be188", "label": "OTT", "children": [] },    { "id": "8eb87bb3ff1ef61081adffffffffff53", "label": "Solana US Catalog_all_offers", "children": [] }  ],  "leafCategoryList": "6ef0159fd0a63110f8770dbf976be189",  "response": [    {      "productOfferingSysId": {        "value": "fe5d203e11307110f877366201dea631",        "displayValue": "fe5d203e11307110f877366201dea631"      },      "code": {        "value": "DOORSENSOR1",        "displayValue": "DOORSENSOR1"      },      "name": {        "value": "Door Sensor",        "displayValue": "Door Sensor"      },      "description": {        "value": "Door Sensor",        "displayValue": "Door Sensor"      },      "offerType": {        "value": "simple",        "displayValue": "simple"      },      "productOfferingFamily": {        "value": "7c93b5e42d1f4110f877e6be976be1a8",        "displayValue": "Smart Home Devices"      },      "pricingMethod": "one_time",      "uom": {        "sysId": "cb2795d553020110286eddeeff7b12ff",        "name": "Each"      },      "offerTypeVariation": "simple",      "listPrice": "$10.00",      "priceList": "19d29513d0e63110f8770dbf976be122"    },    {      "productOfferingSysId": {        "value": "1b20347e11307110f877366201dea67f",        "displayValue": "1b20347e11307110f877366201dea67f"      },      "code": {        "value": "WINSENSOR1",        "displayValue": "WINSENSOR1"      },      "name": {        "value": "Window Sensor",        "displayValue": "Window Sensor"      },      "description": {        "value": "Window Sensor",        "displayValue": "Window Sensor"      },      "offerType": {        "value": "simple",        "displayValue": "simple"      },      "productOfferingFamily": {        "value": "7c93b5e42d1f4110f877e6be976be1a8",        "displayValue": "Smart Home Devices"      },      "pricingMethod": "one_time",      "uom": {        "sysId": "cb2795d553020110286eddeeff7b12ff",        "name": "Each"      },      "offerTypeVariation": "simple",      "listPrice": "$15.00",      "priceList": "19d29513d0e63110f8770dbf976be122"    }  ],  "count": 2}
Search documentation
Search document titles and file paths on the brazil branch