Skip to main content

Overview

Every product link belongs to a merchant host (e.g. nike.com). The merchants resource lets you:
  • merchants.list - browse all merchants Henry lists publicly, with filters
  • merchants.search - free-text merchant search over name + host (typeahead-grade)
  • merchants.retrieve - fetch a single merchant by host
Each merchant comes with its per-method coverage statuses (checkout, productDetails, productSearch) - so you can pick the right merchants for your catalog and gate features per capability.

Prerequisites


List merchants

Call merchants.list to retrieve all merchants available to your app.

Retrieve a single merchant

When you already know the host, merchants.retrieve fetches that merchant directly - no filtering, no pagination.
Returns 404 Not Found if the host is unknown to Henry or isn’t publicly listed.

Search merchants

When all you have is what a user typed - a name fragment, a host fragment - merchants.search resolves it to ranked merchants. It partial-matches the query against merchant name and host (case- and accent-insensitive), ranking prefix matches first, and returns a single ranked page.
Each result carries the full merchant payload - including per-method coverage - so you can scope a product search to a result’s host or gate checkout affordances without a second lookup.
Search is built for typeaheads: results are one ranked page with no cursor. Narrow the query instead of paging.

Discover search filters

merchants.retrieve also returns searchFilters - the categories and variant-option filter axes (option name → display values) that merchant-scoped product search accepts for this merchant.
category is listed for Shopify stores and zara.com. searchFilters is null until either is available - options refresh with the weekly catalog sync. Matching is case-insensitive and best-effort: option filters are honored for merchants served from Henry’s search index and ignored by live search methods.

Filter merchants

1

Filter by host

Look up a specific merchant by domain:
If you already know the host, prefer merchants.retrieve - it’s a direct lookup instead of a filtered list.
2

Filter by name

Partial-match search on merchant display name:
3

Filter by coverage

Restrict results to merchants Henry actively supports (vs. still being onboarded), per method:
One filter per method: checkoutCoverage, productDetailsCoverage, productSearchCoverage.
coverageStatus is a deprecated alias of checkoutCoverage and is ignored when checkoutCoverage is also provided.

Coverage

Every merchant record includes per-method coverage statuses. Use them to gate features per-merchant and pick the right merchants for each capability.

Experimental merchants

A testing status means Henry is actively bringing that capability online but does not yet guarantee it. Each app decides whether it may use those merchants, with the Experimental merchants switch in Settings → App → General → Merchant coverage. With the switch off, a request whose merchant is not supported is rejected with a 403 naming the merchant and the capability. The status is checked per capability, so a merchant that is supported for product search and testing for checkout can be searched but not purchased from. The three gates are merchant-scoped products.search (product search), products.details (product details), and cart.create / cart.item.add / cart.item.update (checkout). The checkout gate runs again when the order is placed, so a cart built before the switch was turned off cannot be purchased either. Global product search is never gated — it spans the whole web, and its results are already ordered supported before testing before unsupported. Pass filters.supportedOnly when you only want merchants Henry fully supports. Every app has it on by default, so a new integration sees the whole catalog until its owner narrows it. Apps created before this setting existed keep exactly the behavior they already had.
Checkout is never allowed for a merchant that is unsupported for checkout, whatever the switch says: cart.create, cart.item.add, cart.item.update, and placing the order all return a 403.

Affiliate rates

When one of Henry’s affiliate networks covers a merchant, the record includes an affiliate object with the highest commission rate our coverage pays there — as a percentage of order value (6 means 6%). Use it to decide which merchants to promote.
The object is omitted for merchants without affiliate coverage (or with no rate on file), so treat it as optional.

Filter reference (merchants.list)


Error handling


Next steps

Product Discovery

Search products from a specific merchant using the merchant filter

Universal Cart

Add product links from supported merchants to a cart