{"revision":"c10276e953456835cdbb1f3a60d58ae1980be353","document":{"id":529,"path":"api-reference/rest-apis/product-catalog-search-api.md","title":"Product Catalog Search API","bundle":null,"doc_type":null,"release":"australia","body":"\n# Product Catalog Search API\n\nThe 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.\n\nThe Product Catalog Search API provides the ability to:\n\n-   Search products by search term across one or all catalogs and across one or all categories within a catalog.\n-   Retrieve the eligible catalog-category hierarchy for a context, with ineligible catalogs and categories filtered out.\n-   Filter results by catalog, category, and catalog type \\(defaults to Product Offering\\).\n-   Supply a header context object to apply account-specific pricing, price lists, currency, channel, shipping/billing address, and sales agreement to search results.\n-   Page through result sets using a zero-based page index and page limit.\n-   Control sort order and sort field \\(for example, by relevance score\\).\n-   Optionally pass an AI Search suggestion ID to support AI-assisted search flows.\n\nThis 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.\n\nThe REST API wraps the JavaScript API [CatalogSearchAPI - Scoped, Global](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/CatalogSearchAPI-scoped_global.md).\n\n## Requirements\n\nThis API is included in the Product Catalog Management Core application, which is available on the ServiceNow Store.\n\nThis API is provided within the `sn_prd_pm` namespace and requires the Product Catalog Management Core plugin \\(sn\\_prd\\_pm\\) to access it.\n\nThe calling user must have the sn\\_prd\\_pm.product\\_catalog\\_viewer or sn\\_prd\\_pm.external\\_product\\_viewer roles.\n\n**Parent Topic:**[REST API reference](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/rest-apis/api-rest.md)\n\n## Product Catalog Search - POST /api/sn\\_prd\\_pm/catalog/search\n\nSearches the product catalog and returns a paginated list of products that match the supplied search parameters.\n\nUse 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.\n\n### Additional usage notes\n\n-   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.\n-   If user has their own context variables for eligibility, those can be passed in **headerContext**.\n-   If **headerContext** isn't provided, the currency will default to the system currency and standard price list.\n-   Pass **sortOrder**, **sortBy** and **aiSearchSuggestionId** request parameters only if AI Search + RAG setup for product catalog search is done on the instance.\n\n### URL format\n\nBase URL: `/api/sn_prd_pm/{api_version}/catalog/search`\n\n### Supported request parameters\n\n<table class=\"rest_api_path_parameters\"><thead><tr><th>\n\nName\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\napi\\_version\n\n</td><td>\n\nRequired. Version of the endpoint to access. Valid value: `v1`.\n\nRequests made without the version fails with a \"Requested URI doesn't represent any resource\" error.\n\nData type: String\n\n</td></tr></tbody>\n</table>|Name|Description|\n|----|-----------|\n|None| |\n\n<table class=\"rest_api_request_body\"><thead><tr><th>\n\nName\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\naiSearchSuggestionId\n\n</td><td>\n\nSys\\_id of an AI Search suggestion record to associate with this search request. Used to support AI-assisted search flows.Data type: String\n\nDefault: empty string\n\n</td></tr><tr><td>\n\ncatalogType\n\n</td><td>\n\nType of catalog items to search. Case-sensitive.Valid values:\n\n-   `PRODUCT_OFFERING`: Fetch product offerings.\n-   `SERVICE_SPECIFICATION`: Fetch service specifications.\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext\n\n</td><td>\n\nContext 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\n\n```\n\"headerContext\": {\n      \"account\": \"String\",\n      \"pricelist\": \"String\",\n      \"currency\": \"String\",\n      \"suppressPricing\": String,\n      \"transaction_date\": \"String\",\n      \"shipping_city\": \"String\",\n      \"shipping_country\": \"String\",\n      \"shipping_location\": \"String\",\n      \"shipping_state\": \"String\",\n      \"shipping_street\": \"String\",\n      \"shipping_zip\": \"String\",\n      \"billing_city\": \"String\",\n      \"billing_country\": \"String\",\n      \"billing_location\": \"String\",\n      \"billing_state\": \"String\",\n      \"billing_street\": \"String\",\n      \"billing_zip\": \"String\",\n      \"sales_agreement\": \"String\"\n    }\n```\n\n</td></tr><tr><td>\n\nheaderContext.account\n\n</td><td>\n\nSys\\_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\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_city\n\n</td><td>\n\nCity for the billing address. Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_country\n\n</td><td>\n\nCountry for the billing address. Example: `USA`Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_location\n\n</td><td>\n\nSys\\_id of the billing location record.Table: Location \\[location\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_state\n\n</td><td>\n\nState or province for the billing address. Example: `TX`Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_street\n\n</td><td>\n\nStreet address for billing.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_zip\n\n</td><td>\n\nPostal code for the billing address. Example: `75254-7536`Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.currency\n\n</td><td>\n\nCurrency code to use for pricing. Example: `USD`.Data type: String\n\nDefault: Derived from account if not supplied. If account not provided, resolves to system currency.\n\n</td></tr><tr><td>\n\nheaderContext.pricelist\n\n</td><td>\n\nSys\\_id of the price list to apply.Table: Pricing List \\[sn\\_csm\\_pricing\\_price\\_list\\]\n\nDefault: Derived from account if not supplied.\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.sales\\_agreement\n\n</td><td>\n\nSys\\_id of the sales agreement to apply.Table: Sales Agreement \\[sn\\_sales\\_agmt\\_core\\_sales\\_agreement\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_city\n\n</td><td>\n\nCity for the shipping address. Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_country\n\n</td><td>\n\nCountry for the shipping address. Example: `USA`Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_location\n\n</td><td>\n\nSys\\_id of the shipping location record.Table: Location \\[location\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_state\n\n</td><td>\n\nState or province for the shipping address. Example: `TX`Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_street\n\n</td><td>\n\nStreet address for shipping. Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_zip\n\n</td><td>\n\nPostal code for the shipping address. Example: `75254-7536`Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.suppressPricing\n\n</td><td>\n\nOptional. Flag that indicates whether to suppress pricing information in the response. Valid values:\n\n-   `true`: Pricing is suppressed.\n-   `false`: Pricing is included.\n\nData type: Boolean\n\nDefault: false\n\n</td></tr><tr><td>\n\nheaderContext.transaction\\_date\n\n</td><td>\n\nDate and time of the transaction.Format: `yyyy-MM-dd HH:mm:ss` \\(Example: 2026-03-30 20:20:08\\)\n\nData type: String\n\n</td></tr><tr><td>\n\npageIndex\n\n</td><td>\n\nZero-based index of the page of results to return. Data type: Number \\(integer\\)\n\nMinimum value: 0\n\nDefault: 0\n\n</td></tr><tr><td>\n\npageLimit\n\n</td><td>\n\nNumber of search results per page.Data type: Number\n\nDefault: 10\n\n</td></tr><tr><td>\n\nsearchTerm\n\n</td><td>\n\nKeyword or phrase to search for in the product catalog. When null or empty, returns all products in the specified catalog.Data type: String\n\nDefault: null\n\n</td></tr><tr><td>\n\nselectedCatalog\n\n</td><td>\n\nSys\\_id of the catalog to search. Table: Product Offering Catalog \\[sn\\_prd\\_pm\\_product\\_offering\\_catalog\\]\n\nData type: String\n\nDefault: “allCatalog” \\(searches across all catalogs\\)\n\n</td></tr><tr><td>\n\nselectedCategory\n\n</td><td>\n\nSys\\_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\\]\n\nData type: String\n\nDefault: “showAll” \\(returns results from all categories within the catalog\\)\n\n</td></tr><tr><td>\n\nsortBy\n\n</td><td>\n\nField to sort results by. Accepted values are dependent on the value of **catalogType**.Valid values:\n\n-   PRODUCT\\_OFFERING:\n    -   `code`\n    -   `description`\n    -   `display_name`\n    -   `name`\n    -   `score`\n-   For SERVICE\\_SPECIFICATION:\n    -   `description`\n    -   `display_name`\n    -   `name`\n    -   `score`\n    -   `specification_code`\n\nData type: String\n\n</td></tr><tr><td>\n\nsortOrder\n\n</td><td>\n\nSort direction for results.Valid values:\n\n-   `ascending`\n-   `descending`\n\nData type: String\n\nDefault: descending\n\n</td></tr></tbody>\n</table>### Headers\n\nThe 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](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/rest-api-explorer/c_RESTAPI.md).\n\n|Header|Description|\n|------|-----------|\n|Accept|Media type accepted by the client. Set to application/json.|\n|Content-Type|Media type of the request body. Set to application/json.|\n|Authorization|Access to the instance. \\(OOB default ACL for scripted REST execute\\)|\n\n|Header|Description|\n|------|-----------|\n|None| |\n\n### Status codes\n\nThe 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](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/rest-api-explorer/c_RESTAPI.md).\n\n|Status code|Description|\n|-----------|-----------|\n|200|OK. The search completed successfully. The response body contains the paginated list of matching products.|\n|401|Unauthorized. The calling user isn't authenticated.|\n|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.|\n|500|Internal Server Error. Custom message - “The request couldn't be processed due to an internal server error. Please retry later.\"|\n\n### Response body parameters \\(JSON or XML\\)\n\n<table><thead><tr><th>\n\nName\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\nselectedCatalogHierarchy\n\n</td><td>\n\nList of all eligible catalog objects when no default catalog is configured and \"All Catalogs\" is the selected view.Data type: Array of Objects\n\n```\n\"selectedCatalogHierarchy\": [\n  {\n   \"id\": \"String\",\n   \"label\": \"String\",\n   \"children\": [] \n  }\n]\n```\n\n</td></tr><tr><td>\n\nselectedCatalogHierarchy.id\n\n</td><td>\n\nCategory identifier. A sys\\_id for catalog categories, or the literal `showAll` for the \"Show all\" option.Data type: String\n\n</td></tr><tr><td>\n\nselectedCatalogHierarchy.label\n\n</td><td>\n\nDisplay name of the category.Data type: String\n\n</td></tr><tr><td>\n\nselectedCatalogHierarchy.children\n\n</td><td>\n\nChild category nodes. Dependent on the value set for **selectedCategory** in the request:\n\n-   Value is empty or `showAll` \\(default\\): Returns an empty array \\(`[]`\\) when there are no children; the `showAll` node returns an empty object \\(`{}`\\).\n-   Value is a sys\\_id: Returns the child sys ID, display value, and any nested children associated with the given category sys\\_id.\n\n Data type: Object or Array\n\n ```\n//'selectedCategory' is 'showAll'\n\n{\n   \"id\": \"showAll\",\n   \"label\": \"Show all\",\n   \"children\": {}\n}\n\n```\n\n ```\n//'selectedCategory' is sys_id\n\n{\n \"id\": \"String\",\n \"label\": \"String\",\n \"children\": [\n  {\n   \"id\": \"String\",\n   \"label\": \"String\",\n   \"children\": [Array]\n  }\n ]\n}\n```\n\n</td></tr><tr><td>\n\nleafCategoryList\n\n</td><td>\n\nA 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.\n\nData type: String\n\n</td></tr><tr><td>\n\nresponse\n\n</td><td>\n\nAn array matching the current filter criteria, including search terms, selected category, and eligibility rules.Data type: Array of Objects\n\n```\n\"response\": [\n {\n   \"productOfferingSysId\": {Object},\n   \"code\": {Object},\n   \"name\": {Object},\n   \"description\": {Object},\n   \"offerType\": {Object},\n   \"pricingMethod\": \"String\",\n   \"uom\": {Object},\n   \"offerTypeVariation\": \"String\",\n   \"listPrice\": \"String\",\n   \"priceList\": \"String\"\n }\n]\n```\n\n</td></tr><tr><td>\n\nresponse. productOfferingSysId\n\n</td><td>\n\nList containing the sys\\_id\\(s\\) of the product offering record\\(s\\).Data type: Object\n\n```\n\"productOfferingSysId\": {\n  \"value\": \"String\",\n  \"displayValue\": \"String\"\n}\n```\n\n</td></tr><tr><td>\n\nresponse.productOfferingSysId.value\n\n</td><td>\n\nStored \\(raw\\) value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.productOfferingSysId.displayValue\n\n</td><td>\n\nDisplay value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.code\n\n</td><td>\n\nProduct offering code.Data type: Object\n\n```\n\"code\": {\n  \"value\": \"String\",\n  \"displayValue\": \"String\"\n}\n```\n\n</td></tr><tr><td>\n\nresponse.code.value\n\n</td><td>\n\nStored \\(raw\\) value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.code.displayValue\n\n</td><td>\n\nDisplay value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.name\n\n</td><td>\n\nDisplay name of the product offering.Data type: Object\n\n```\n\"name\": {\n  \"value\": \"String\",\n  \"displayValue\": \"String\"\n}\n```\n\n</td></tr><tr><td>\n\nresponse.name.value\n\n</td><td>\n\nStored \\(raw\\) value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.name.displayValue\n\n</td><td>\n\nDisplay value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.description\n\n</td><td>\n\nDetails about the product offering.Data type: Object\n\n```\n\"description\": {\n  \"value\": \"String\",\n  \"displayValue\": \"String\"\n}\n```\n\n</td></tr><tr><td>\n\nresponse.description.value\n\n</td><td>\n\nStored \\(raw\\) value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.description.displayValue\n\n</td><td>\n\nDisplay value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.offerType\n\n</td><td>\n\nType of the product offering \\(for example, `simple`, `config`, or `simple_with_spec`\\).Data type: Object\n\n```\n\"offerType\": {\n  \"value\": \"String\",\n  \"displayValue\": \"String\"\n}\n```\n\n</td></tr><tr><td>\n\nresponse.offerType.value\n\n</td><td>\n\nStored \\(raw\\) value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.offerType.displayValue\n\n</td><td>\n\nDisplay value of the field.Data type: String\n\n</td></tr><tr><td>\n\nresponse.pricingMethod\n\n</td><td>\n\nPricing method for the offering.Possible values:\n\n-   `one_time`\n-   `recurring`\n\nData type: String\n\n</td></tr><tr><td>\n\nresponse.uom\n\n</td><td>\n\nUnit of measure for the offering.Data type: Object\n\n```\n\"uom\": {\n  \"sysId\": \"String\",\n  \"name\": \"String\"\n}\n```\n\n</td></tr><tr><td>\n\nresponse.uom.sys\\_id\n\n</td><td>\n\nSys\\_id of the unit-of-measure record.Data type: String\n\n</td></tr><tr><td>\n\nresponse.uom.name\n\n</td><td>\n\nDisplay name of the unit of measure \\(for example, `Each`\\).Data type: String\n\n</td></tr><tr><td>\n\nresponse.offerTypeVariation\n\n</td><td>\n\nVariation type of the offering, typically matching offerType.Data type: String\n\n</td></tr><tr><td>\n\nresponse.listPrice\n\n</td><td>\n\nFormatted list price of the product offering \\(for example, `\"$50.00\"`\\). May be absent if no price is configured.Data type: String\n\n</td></tr><tr><td>\n\nresponse.priceList\n\n</td><td>\n\nSys\\_id of the associated price list record. May be absent if no price list is assigned.Data type: String\n\n</td></tr><tr><td>\n\nresponse.visual\n\n</td><td>\n\nURL to the product offering's image/thumbnail, if configured and if sn\\_prd\\_pm.show\\_product\\_visuals system property is enabled.Data type: String\n\n</td></tr><tr><td>\n\nresponse.derivedPrice\n\n</td><td>\n\nFlag 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:\n\n-   true: Product's price is calculated dynamically.\n-   false: Product's price is calculated using a fixed catalog list price.\n\nData type: Boolean\n\n</td></tr><tr><td>\n\nresponse.items.semanticSimilarity\n\n</td><td>\n\nRelevance or semantic score assigned to this result by the AI search engine. Field is absent from non-AI Search responses.Data type: Number\n\n</td></tr><tr><td>\n\nspellCorrectedTerm\n\n</td><td>\n\nSpell-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\n\n</td></tr><tr><td>\n\nsuggestedRecordDisplayName\n\n</td><td>\n\nDisplay name of a suggested record, returned when AI Search + RAG is enabled and a direct match suggestion exists.Data type: String\n\n</td></tr><tr><td>\n\ncount\n\n</td><td>\n\nNumber of product offerings in the `response` array.Data type: Number\n\n</td></tr></tbody>\n</table>### cURL request\n\nThe following example searches for offerings matching the term 'modem' within a specific catalog and category, with an account context for pricing and eligibility.\n\n```\ncurl \"https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/search\" \\ \n--request POST \\ \n--header \"Accept:application/json\" \\ \n--header \"Content-Type:application/json\" \\ \n--data \"{\\\"searchTerm\\\":\\\"modem\\\",\\\"selectedCatalog\\\":\\\"eaf0159fd0a63110f8770dbf976be178\\\",\\\"selectedCategory\\\":\\\"e6f0159fd0a63110f8770dbf976be18c\\\",\\\"headerContext\\\":{\\\"account\\\":\\\"ffc68911c35420105252716b7d40dd55\\\"}}\" \\ \n--user 'username':'password' \n```\n\nResponse body.\n\n```\n{\n  \"selectedCatalogHierarchy\": [\n    { \"id\": \"showAll\", \"label\": \"Show all\", \"children\": {} },\n    { \"id\": \"eaf0159fd0a63110f8770dbf976be18a\", \"label\": \"Connected Car\", \"children\": [] },\n    { \"id\": \"7e6d2c02742e4a10f877468e695efae1\", \"label\": \"Connectivity Services\", \"children\": [] },\n    { \"id\": \"aef0159fd0a63110f8770dbf976be185\", \"label\": \"Elevators\", \"children\": [] },\n    { \"id\": \"50605f1a49e0b210f8777676c00265b6\", \"label\": \"Enterprise SaaS Solutions\", \"children\": [] },\n    { \"id\": \"6ef0159fd0a63110f8770dbf976be189\", \"label\": \"Home Automation\", \"children\": [] },\n    { \"id\": \"e6f0159fd0a63110f8770dbf976be18c\", \"label\": \"Internet\", \"children\": [] },\n    { \"id\": \"6af0159fd0a63110f8770dbf976be18b\", \"label\": \"MultiPlay\", \"children\": [] },\n    { \"id\": \"eef0159fd0a63110f8770dbf976be188\", \"label\": \"OTT\", \"children\": [] },\n    { \"id\": \"8eb87bb3ff1ef61081adffffffffff53\", \"label\": \"Solana US Catalog_all_offers\", \"children\": [] }\n  ],\n  \"leafCategoryList\": \"e6f0159fd0a63110f8770dbf976be18c\",\n  \"response\": [\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"0b61dd9fd0a63110f8770dbf976be171\",\n        \"displayValue\": \"0b61dd9fd0a63110f8770dbf976be171\"\n      },\n      \"code\": {\n        \"value\": \"SOLANAMODE2\",\n        \"displayValue\": \"SOLANAMODE2\"\n      },\n      \"name\": {\n        \"value\": \"Solana Modem M Series\",\n        \"displayValue\": \"Solana Modem M Series\"\n      },\n      \"description\": {\n        \"value\": \"Solana Modem M Series\",\n        \"displayValue\": \"Solana Modem M Series\"\n      },\n      \"offerType\": {\n        \"value\": \"simple\",\n        \"displayValue\": \"simple\"\n      },\n      \"pricingMethod\": \"one_time\",\n      \"uom\": {\n        \"sysId\": \"cb2795d553020110286eddeeff7b12ff\",\n        \"name\": \"Each\"\n      },\n      \"offerTypeVariation\": \"simple\",\n      \"listPrice\": \"$130.00\",\n      \"priceList\": \"19d29513d0e63110f8770dbf976be122\"\n    },\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"0761dd9fd0a63110f8770dbf976be173\",\n        \"displayValue\": \"0761dd9fd0a63110f8770dbf976be173\"\n      },\n      \"code\": {\n        \"value\": \"SOLANAMODE1\",\n        \"displayValue\": \"SOLANAMODE1\"\n      },\n      \"name\": {\n        \"value\": \"Solana Modem N Series\",\n        \"displayValue\": \"Solana Modem N Series\"\n      },\n      \"description\": {\n        \"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] \",\n        \"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] \"\n      },\n      \"offerType\": {\n        \"value\": \"simple\",\n        \"displayValue\": \"simple\"\n      },\n      \"pricingMethod\": \"one_time\",\n      \"uom\": {\n        \"sysId\": \"cb2795d553020110286eddeeff7b12ff\",\n        \"name\": \"Each\"\n      },\n      \"offerTypeVariation\": \"simple\",\n      \"listPrice\": \"$120.00\",\n      \"priceList\": \"19d29513d0e63110f8770dbf976be122\"\n    }\n  ],\n  \"count\": 2\n}\n```\n\n### cURL request\n\nThe following example searches for service specifications matching the term “firewall service”.\n\n```\ncurl \"https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/search\" \\ \n--request POST \\ \n--header \"Accept:application/json\" \\ \n--header \"Content-Type:application/json\" \\ \n--data \"{\\\"searchTerm\\\":\\\"firewall service\\\", \\\"catalogType\\\":\\\"SERVICE_SPECIFICATION\\\"}\" \\ \n--user 'admin':'admin'\n```\n\nResponse body.\n\n```\n{\n  \"response\": [\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"f99546ff07266010a7955b7e0ad300a8\",\n        \"displayValue\": \"f99546ff07266010a7955b7e0ad300a8\"\n      },\n      \"code\": {\n        \"value\": \"MANAGEDFIREWALLSERVICE\",\n        \"displayValue\": \"MANAGEDFIREWALLSERVICE\"\n      },\n      \"name\": {\n        \"value\": \"Managed Firewall Service\",\n        \"displayValue\": \"Managed Firewall Service\"\n      },\n      \"description\": {\n        \"value\": \"Managed Firewall Service\",\n        \"displayValue\": \"Managed Firewall Service\"\n      },\n      \"offerType\": {\n        \"value\": \"config\",\n        \"displayValue\": \"config\"\n      }\n    },\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"52c6b30d773301108b2a1e599a5a9954\",\n        \"displayValue\": \"52c6b30d773301108b2a1e599a5a9954\"\n      },\n      \"code\": {\n        \"value\": \"MANAGEDFIREWALLSERVICEV2\",\n        \"displayValue\": \"MANAGEDFIREWALLSERVICEV2\"\n      },\n      \"name\": {\n        \"value\": \"Managed Firewall Service v2\",\n        \"displayValue\": \"Managed Firewall Service v2\"\n      },\n      \"description\": {\n        \"value\": \"Managed Firewall Service\",\n        \"displayValue\": \"Managed Firewall Service\"\n      },\n      \"offerType\": {\n        \"value\": \"config\",\n        \"displayValue\": \"config\"\n      }\n    },\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"35d077304f3e1110b915b2e76e72e06e\",\n        \"displayValue\": \"35d077304f3e1110b915b2e76e72e06e\"\n      },\n      \"code\": {\n        \"value\": \"MANAGEDFIREWALLSERVICEV3\",\n        \"displayValue\": \"MANAGEDFIREWALLSERVICEV3\"\n      },\n      \"name\": {\n        \"value\": \"Managed Firewall Service v3\",\n        \"displayValue\": \"Managed Firewall Service v3\"\n      },\n      \"description\": {\n        \"value\": \"Managed Firewall Service\",\n        \"displayValue\": \"Managed Firewall Service\"\n      },\n      \"offerType\": {\n        \"value\": \"config\",\n        \"displayValue\": \"config\"\n      }\n    },\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"14735356775131108e191e599a5a99c9\",\n        \"displayValue\": \"14735356775131108e191e599a5a99c9\"\n      },\n      \"code\": {\n        \"value\": \"MANAGEDFIREWALLSERVICEV4\",\n        \"displayValue\": \"MANAGEDFIREWALLSERVICEV4\"\n      },\n      \"name\": {\n        \"value\": \"Managed Firewall Service v4\",\n        \"displayValue\": \"Managed Firewall Service v4\"\n      },\n      \"description\": {\n        \"value\": \"Managed Firewall Service\",\n        \"displayValue\": \"Managed Firewall Service\"\n      },\n      \"offerType\": {\n        \"value\": \"config\",\n        \"displayValue\": \"config\"\n      }\n    }\n  ],\n  \"count\": 4\n}\n```\n\n### cURL request\n\nThe following example performs a search request using the full set of parameters and a complete header context.\n\n```\ncurl \"https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/search\" \\\n  --request POST \\\n  --header \"Accept: application/json\" \\\n  --header \"Content-Type: application/json\" \\\n  --user 'username:password' \\\n  --data '{\n    \"searchTerm\": \"sensor\",\n    \"selectedCatalog\": \"eaf0159fd0a63110f8770dbf976be178\",\n    \"selectedCategory\": \"6ef0159fd0a63110f8770dbf976be189\",\n    \"pageIndex\": 0,\n    \"pageLimit\": 10,\n    \"catalogType\": \"PRODUCT_OFFERING\",\n    \"sortOrder\": \"descending\",\n    \"sortBy\": \"score\",\n    \"aiSearchSuggestionId\": \"\",\n    \"headerContext\": {\n      \"account\": \"ffc68911c35420105252716b7d40dd55\",\n      \"pricelist\": \"19d29513d0e63110f8770dbf976be122\",\n      \"currency\": \"USD\",\n      \"suppressPricing\": false,\n      \"transaction_date\": \"2026-03-30 20:20:08\",\n      \"shipping_city\": \"Dallas\",\n      \"shipping_country\": \"USA\",\n      \"shipping_location\": \"25aba2ed0a0a0bb300b69ce49ae72211\",\n      \"shipping_state\": \"TX\",\n      \"shipping_street\": \"13770 Noel Road, Dallas\",\n      \"shipping_zip\": \"75254-7536\",\n      \"billing_city\": \"Dallas\",\n      \"billing_country\": \"USA\",\n      \"billing_location\": \"25aba2ed0a0a0bb300b69ce49ae72211\",\n      \"billing_state\": \"TX\",\n      \"billing_street\": \"13770 Noel Road, Dallas\",\n      \"billing_zip\": \"75254-7536\",\n      \"sales_agreement\": \"\"\n    }\n  }'\n```\n\nResponse body.\n\n```\n{\n  \"selectedCatalogHierarchy\": [\n    { \"id\": \"showAll\", \"label\": \"Show all\", \"children\": {} },\n    { \"id\": \"eaf0159fd0a63110f8770dbf976be18a\", \"label\": \"Connected Car\", \"children\": [] },\n    { \"id\": \"7e6d2c02742e4a10f877468e695efae1\", \"label\": \"Connectivity Services\", \"children\": [] },\n    { \"id\": \"aef0159fd0a63110f8770dbf976be185\", \"label\": \"Elevators\", \"children\": [] },\n    { \"id\": \"50605f1a49e0b210f8777676c00265b6\", \"label\": \"Enterprise SaaS Solutions\", \"children\": [] },\n    { \"id\": \"6ef0159fd0a63110f8770dbf976be189\", \"label\": \"Home Automation\", \"children\": [] },\n    { \"id\": \"e6f0159fd0a63110f8770dbf976be18c\", \"label\": \"Internet\", \"children\": [] },\n    { \"id\": \"6af0159fd0a63110f8770dbf976be18b\", \"label\": \"MultiPlay\", \"children\": [] },\n    { \"id\": \"eef0159fd0a63110f8770dbf976be188\", \"label\": \"OTT\", \"children\": [] },\n    { \"id\": \"8eb87bb3ff1ef61081adffffffffff53\", \"label\": \"Solana US Catalog_all_offers\", \"children\": [] }\n  ],\n  \"leafCategoryList\": \"6ef0159fd0a63110f8770dbf976be189\",\n  \"response\": [\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"fe5d203e11307110f877366201dea631\",\n        \"displayValue\": \"fe5d203e11307110f877366201dea631\"\n      },\n      \"code\": {\n        \"value\": \"DOORSENSOR1\",\n        \"displayValue\": \"DOORSENSOR1\"\n      },\n      \"name\": {\n        \"value\": \"Door Sensor\",\n        \"displayValue\": \"Door Sensor\"\n      },\n      \"description\": {\n        \"value\": \"Door Sensor\",\n        \"displayValue\": \"Door Sensor\"\n      },\n      \"offerType\": {\n        \"value\": \"simple\",\n        \"displayValue\": \"simple\"\n      },\n      \"pricingMethod\": \"one_time\",\n      \"uom\": {\n        \"sysId\": \"cb2795d553020110286eddeeff7b12ff\",\n        \"name\": \"Each\"\n      },\n      \"offerTypeVariation\": \"simple\",\n      \"listPrice\": \"$10.00\",\n      \"priceList\": \"19d29513d0e63110f8770dbf976be122\"\n    },\n    {\n      \"productOfferingSysId\": {\n        \"value\": \"1b20347e11307110f877366201dea67f\",\n        \"displayValue\": \"1b20347e11307110f877366201dea67f\"\n      },\n      \"code\": {\n        \"value\": \"WINSENSOR1\",\n        \"displayValue\": \"WINSENSOR1\"\n      },\n      \"name\": {\n        \"value\": \"Window Sensor\",\n        \"displayValue\": \"Window Sensor\"\n      },\n      \"description\": {\n        \"value\": \"Window Sensor\",\n        \"displayValue\": \"Window Sensor\"\n      },\n      \"offerType\": {\n        \"value\": \"simple\",\n        \"displayValue\": \"simple\"\n      },\n      \"pricingMethod\": \"one_time\",\n      \"uom\": {\n        \"sysId\": \"cb2795d553020110286eddeeff7b12ff\",\n        \"name\": \"Each\"\n      },\n      \"offerTypeVariation\": \"simple\",\n      \"listPrice\": \"$15.00\",\n      \"priceList\": \"19d29513d0e63110f8770dbf976be122\"\n    }\n  ],\n  \"count\": 2\n}\n```\n\n## Product Catalog Search - POST /api/sn\\_prd\\_pm/v1/catalog/eligible-catalog-category-hierarchy\n\nRetrieves the product catalog-category hierarchy filtered by eligibility rules. Resolves the input header context request object \\(currency, pricelist, address, etc.\\), and applies eligibility encoded queries to filter out ineligible catalogs/categories to construct the tree.\n\n### URL format\n\nDefault URL: `/api/sn_prd_pm/{api_version}/catalog/eligible-catalog-category-hierarchy`\n\n### Supported request parameters\n\n<table class=\"rest_api_path_parameters\"><thead><tr><th>\n\nName\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\napi\\_version\n\n</td><td>\n\nRequired. Version of the endpoint to access. Valid value: `v1`.\n\nRequests made without the version fails with a \"Requested URI doesn't represent any resource\" error.\n\nData type: String\n\n</td></tr></tbody>\n</table>|Name|Description|\n|----|-----------|\n|None| |\n\n<table class=\"rest_api_request_body\"><thead><tr><th>\n\nName\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\nheaderContext\n\n</td><td>\n\nContext object that controls the eligibility used to resolve the catalog-category hierarchy. When omitted, the API derives context from the account if one is provided.Data type: Object\n\n```\n\"headerContext\": {\n    \"account\": \"String\",\n    \"billing_city\": \"String\",\n    \"billing_country\": \"String\",\n    \"billing_location\": \"String\",\n    \"billing_state\": \"String\",\n    \"billing_street\": \"String\",\n    \"billing_zip\": \"String\",\n    \"currency\": \"String\",\n    \"pricelist\": \"String\",\n    \"sales_agreement\": \"String\",\n    \"shipping_city\": \"String\",\n    \"shipping_country\": \"String\",\n    \"shipping_location\": \"String\",\n    \"shipping_state\": \"String\",\n    \"shipping_street\": \"String\",\n    \"shipping_zip\": \"String\",\n    \"transaction_date\": \"String\"\n  }\n```\n\n</td></tr><tr><td>\n\nheaderContext.account\n\n</td><td>\n\nOptional. 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.Table: Accounts \\[customer\\_account\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_city\n\n</td><td>\n\nOptional. City for the billing address.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_country\n\n</td><td>\n\nOptional. Country for the billing address.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_location\n\n</td><td>\n\nOptional. Sys\\_id of the billing location record.Table: Location \\[location\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_state\n\n</td><td>\n\nOptional. State or province code of the billing address.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_street\n\n</td><td>\n\nOptional. Street address for billing.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.billing\\_zip\n\n</td><td>\n\nPostal code for the billing address.Example: 75254-7536\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.currency\n\n</td><td>\n\nCurrency code to use for pricing.Example: USD\n\nData type: String\n\nDefault: Derived from account if not supplied. If account not provided, resolves to system currency.\n\n</td></tr><tr><td>\n\nheaderContext.pricelist\n\n</td><td>\n\nOptional. Sys\\_id of the price list.Table: Pricing List \\[sn\\_csm\\_pricing\\_price\\_list\\]\n\nData type: String\n\nDefault: Derived from account if not supplied.\n\n</td></tr><tr><td>\n\nheaderContext.sales\\_agreement\n\n</td><td>\n\nOptional. Sys\\_id of the sales agreement to apply. Table: Sales Agreement \\[sn\\_sales\\_agmt\\_core\\_sales\\_agreement\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_city\n\n</td><td>\n\nOptional. City for the shipping address.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_country\n\n</td><td>\n\nOptional. Country for the shipping address.Example: USA\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_location\n\n</td><td>\n\nSys\\_id of the shipping location record.Table: Location \\[location\\]\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_state\n\n</td><td>\n\nState or province for the shipping address.Example: TX\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_street\n\n</td><td>\n\nOptional. Street address for shipping.Data type: String\n\n</td></tr><tr><td>\n\nheaderContext.shipping\\_zip\n\n</td><td>\n\nOptional. Postal code for the shipping address. Example: 75254-7536\n\nData type: String\n\n</td></tr><tr><td>\n\nheaderContext.transaction\\_date\n\n</td><td>\n\nDate and time of the transaction.Format: yyyy-MM-dd HH:mm:ss\n\nExample: 2026-03-30 20:20:08\n\nData type: String\n\n</td></tr></tbody>\n</table>### Headers\n\nThe 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](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/rest-api-explorer/c_RESTAPI.md).\n\n|Header|Description|\n|------|-----------|\n|Accept|Media type accepted by the client. Set to application/JSON.|\n|Content-Type|Media type of the request body. Set to application/JSON.|\n|Authorization|Access to the ServiceNow instance \\(default ACL for scripted REST execute\\).|\n\n|Header|Description|\n|------|-----------|\n|None|No custom response headers returned by this endpoint.|\n\n### Status codes\n\nThe 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](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/rest-api-explorer/c_RESTAPI.md).\n\n|Status code|Description|\n|-----------|-----------|\n|200|OK. The request completed successfully. The response body contains the eligible catalog-category hierarchy for the resolved context.|\n|401|Unauthorized. The calling user isn't authenticated.|\n|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.|\n|500|Internal Server Error. Custom message: `The request couldn't be processed due to an internal server error. Please retry later.`|\n\n### Response body parameters \\(JSON or XML\\)\n\n<table><thead><tr><th>\n\nName\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\ndefaultCatalog\n\n</td><td>\n\nThe primary catalog configured as the default for the current context, containing its full category hierarchy tree. Only present when a published catalog with `is_default=true` exists and has eligible categories beyond \"Show all\".\n\nData type: Object\n\n```\n{\n  \"id\": \"String\",\n  \"label\": \"String\",\n  \"categories\": [Array]\n}\n```\n\n</td></tr><tr><td>\n\ndefaultCatalog.id\n\n</td><td>\n\nSys\\_id of the default product offering catalog record.Table: Product Offering Catalog \\[sn\\_prd\\_pm\\_product\\_offering\\_catalog\\]\n\nData type: String\n\n</td></tr><tr><td>\n\ndefaultCatalog.label\n\n</td><td>\n\nDisplay name of the default catalog. Data type: String\n\n</td></tr><tr><td>\n\ndefaultCatalog.categories\n\n</td><td>\n\nTop-level categories within the default catalog, each containing a recursive children tree of subcategories. Always includes a synthetic \"Show all\" entry as the first element. Data type: Array of Objects\n\n```\n[\n  {\n    \"id\": \"String\",\n    \"label\": \"String\",\n    \"children\": [Array]\n  }\n]\n```\n\n</td></tr><tr><td>\n\ncatalogList\n\n</td><td>\n\nAn alphabetically sorted array of all other eligible published product offering catalogs \\(excluding the default\\), each with its own category hierarchy tree. Present even when empty. Data type: Array of Objects\n\n```\n[\n  {\n    \"id\": \"String\",\n    \"label\": \"String\",\n    \"categories\": [Array]\n  }\n]\n```\n\n</td></tr><tr><td>\n\ncatalogList.id\n\n</td><td>\n\nSys\\_id of the product offering catalog record.Table: Product Offering Catalog \\[sn\\_prd\\_pm\\_product\\_offering\\_catalog\\]\n\nData type: String\n\n</td></tr><tr><td>\n\ncatalogList.label\n\n</td><td>\n\nDisplay name of the catalog.Data type: String\n\n</td></tr><tr><td>\n\ncatalogList.categories\n\n</td><td>\n\nTop-level categories within the catalog, each containing a recursive children tree of subcategories. Always includes a synthetic \"Show all\" entry as the first element. Catalogs that would contain only \"Show all\" \\(no eligible categories\\) are removed entirely from the response.\n\nData type: Array of Objects\n\n```\n[\n  {\n    \"id\": \"String\",\n    \"label\": \"String\",\n    \"children\": [Array]\n  }\n]\n```\n\n</td></tr><tr><td>\n\ncategories.id\n\n</td><td>\n\nSys\\_id of the category record, or the literal string \"showAll\" for the default catch-all entry.Table: Product Category \\[sn\\_prd\\_pm\\_product\\_category\\]\n\nData type: String\n\n</td></tr><tr><td>\n\ncategories.label\n\n</td><td>\n\nLocalized display name of the category. Translated via gs.getMessage for \"Show all\", via getDisplayValue\\('name'\\) for real categories.Data type: String\n\n</td></tr><tr><td>\n\ncategories.children\n\n</td><td>\n\nChild category objects following the same structure recursively \\(id, label, children\\). Empty array \\[\\] when the category is a leaf node. Empty object \\{\\} for the \"Show all\" entry. Data type: Array of Objects\n\n```\n[\n  {\n    \"id\": \"String\",\n    \"label\": \"String\",\n    \"children\": [Array]\n  }\n]\n```\n\n</td></tr></tbody>\n</table>### cURL request\n\nThe following example retrieves a complete product catalog-category hierarchy.\n\n```\ncurl \"https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/eligible-catalog-category-hierarchy\" \\ \n--request POST \\ \n--header \"Accept:application/json\" \\  \n--header \"Content-Type:application/json\" \\ \n--user 'username':'password' \n```\n\nResponse:\n\n```\n{\n  \"defaultCatalog\": {\n    \"id\": \"eaf0159fd0a63110f8770dbf976be178\",\n    \"label\": \"Solana US Catalog\",\n    \"categories\": [\n      {\n        \"id\": \"showAll\",\n        \"label\": \"Show all\",\n        \"children\": {}\n      },\n      {\n        \"id\": \"eaf0159fd0a63110f8770dbf976be18a\",\n        \"label\": \"Connected Car\",\n        \"children\": []\n      },\n      {\n        \"id\": \"7e6d2c02742e4a10f877468e695efae1\",\n        \"label\": \"Connectivity Services\",\n        \"children\": []\n      }\n    ]\n  },\n  \"catalogList\": [\n    {\n      \"id\": \"caecc5fd4f12e110c5ff2624b2ce0b0e\",\n      \"label\": \"Business Ethernet Plan\",\n      \"categories\": [\n        {\n          \"id\": \"showAll\",\n          \"label\": \"Show all\",\n          \"children\": {}\n        },\n        {\n          \"id\": \"9fe305a143b631105029d1529ab8f27b\",\n          \"label\": \"Business Ethernet Plan_all_offers\",\n          \"children\": []\n        }\n      ]\n    },\n    {\n      \"id\": \"c835d8792b11525047f3f3e30391bf31\",\n      \"label\": \"Food and Beverage Processing\",\n      \"categories\": [\n        {\n          \"id\": \"showAll\",\n          \"label\": \"Show all\",\n          \"children\": {}\n        },\n        {\n          \"id\": \"1c7950f12b51525047f3f3e30391bfac\",\n          \"label\": \"Beverage Processing\",\n          \"children\": [\n            {\n              \"id\": \"5c8814712b51525047f3f3e30391bf3f\",\n              \"label\": \"Boiling Water Treatment\",\n              \"children\": []\n            },\n            {\n              \"id\": \"2da810b12b51525047f3f3e30391bf48\",\n              \"label\": \"Cooling Water Treatment\",\n              \"children\": []\n            }\n          ]\n        },\n        {\n          \"id\": \"1ca954f12b51525047f3f3e30391bfee\",\n          \"label\": \"Food Processing\",\n          \"children\": [\n            {\n              \"id\": \"60c95cb12b51525047f3f3e30391bf94\",\n              \"label\": \"Automation Data & Digital\",\n              \"children\": [\n                {\n                  \"id\": \"c4ae46362b519e5021e4f1e04391bf3a\",\n                  \"label\": \"Asset Performance Management\",\n                  \"children\": []\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n```\n\n### cURL request\n\nThe following example shows a response with eligibility filtering applied.\n\nEligibility rules can restrict which catalogs and categories are returned based on the resolved context \\(e.g., account, currency, pricelist, address, or any combination configured in the eligibility rule matrix\\). When a catalog/category is deemed ineligible, it is removed entirely from the response - it does not appear in defaultCatalog or catalogList.\n\nIn this example, eligibility rules configured on the instance exclude \"Solana US Catalog\" for the given context. As a result, the next eligible catalog marked as default - \"Configurable Products\" - is promoted to defaultCatalog.\n\n```\ncurl \"https://instance.servicenow.com/api/sn_prd_pm/v1/catalog/eligible-catalog-category-hierarchy\" \\\n--request POST \\ \n--header \"Accept:application/json\" \\ \n--header \"Content-Type:application/json\" \\ \n--data \"{\\\"headerContext\\\":{\\\"account\\\":\\\"86837a386f0331003b3c498f5d3ee4ca\\\"}}\" \\ \n--user 'username':'password'\n```\n\nResponse:\n\n```\n{\n  \"defaultCatalog\": {\n    \"id\": \"b3082af8ff30bad005aafffffffffff9\",\n    \"label\": \"Configurable Products\",\n    \"categories\": [\n      {\n        \"id\": \"showAll\",\n        \"label\": \"Show all\",\n        \"children\": {}\n      },\n      {\n        \"id\": \"7f082af8ff30bad005aafffffffffff9\",\n        \"label\": \"Configurable Products\",\n        \"children\": []\n      }\n    ]\n  },\n  \"catalogList\": [\n    {\n      \"id\": \"caecc5fd4f12e110c5ff2624b2ce0b0e\",\n      \"label\": \"Business Ethernet Plan\",\n      \"categories\": []\n    }\n  ]\n}\n```\n\n"}}