Skip to main content
MerchantsCart

Unsupported Merchants Blocked From Checkout

  • Checkout is no longer allowed for a merchant that is unsupported for checkout, even with Experimental merchants on. cart.create, cart.item.add, cart.item.update, and placing the order return a 403 naming the merchant. testing merchants are still allowed with the switch on.
  • Product search and details are unchanged. See Experimental merchants.
Product SearchProduct DetailsSDK
v1.20.0

Location

  • Merchant search accepts filters.location and product details accepts location: { country, state, city, postalCode }. Best-effort - honored by merchants whose results depend on location, starting with fandango.com, which needs postalCode to list showtimes.
  • Available in @henrylabs/sdk@1.20.0, which also drops the merchant categories field and filter (see October 22).
Product SearchMerchants

Category Search on Zara

  • merchants.retrieve for zara.com returns searchFilters.category, and merchant search on Zara accepts filters.category.
MerchantsBreaking

Merchant Industry Categories Removed

  • Breaking: merchants no longer carry a top-level categories field (the merchant’s industry, e.g. fashion_and_accessories), and merchants.list no longer accepts a categories filter. Remove any reads of merchant.categories before upgrading the SDK.
  • A merchant’s product categories are in searchFilters.category on merchants.retrieve, usable as filters.category on merchant search.
Product SearchMerchantsSDK
v1.19.0
  • merchants.retrieve returns searchFilters.category, the merchant’s categories. Shopify merchants only.
  • Merchant search accepts filters.category to page through one category, or search within it with query. See Search one category.
  • Available in @henrylabs/sdk@1.19.0.
Merchants

Choose Whether Your App Can Use Merchants Still in Testing

  • Each app now has an Experimental merchants switch in Settings → App → General → Merchant coverage. With it off, your app may only use merchants whose coverage for the capability you are calling is supported; a request to any other merchant is rejected with a 403 naming the merchant and the capability.
  • Coverage 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 gates are merchant-scoped products.search, products.details, and cart.create / cart.item.add / cart.item.update, and the checkout gate runs again when an order is placed. Global product search is unaffected — its results are already ordered supported first, and filters.supportedOnly narrows them to fully supported merchants.
  • Nothing changes unless you turn it off: every app, new or existing, has the switch on, which is the behavior you have today. Turn it off when you want your integration to see only merchants we fully support. See the Merchant guide.
MCPCardsBeta

Card Issuance on the Remote MCP

  • The remote MCP now exposes cardIssue, cardGet, and cardClose, so an agent can issue a limited card from a buyer’s tokenized card right before each purchase. Requires Card Issuance (beta) on your account.
Product SearchSDK
v1.18.0
CardsCheckout

Statement Name

  • Charges Henry Labs makes on a buyer’s card now read HENRY LABS* <MERCHANT> on their statement, for example HENRY LABS* ZARA, instead of HENRY* <MERCHANT>. Merchant names longer than 10 characters are shortened. Your integration doesn’t change. If you show buyers sample statement text, update it.
CheckoutCardsBeta

Card Issuance (Beta)

Card Issuance is in beta. Email support@henrylabs.ai to request access.
  • Check out on a single-purpose virtual card paid for by your buyer’s card. Unspent amounts are refunded automatically. See the Issued Cards guide.
  • cart.checkout.purchase accepts checkoutDetailsRefIds to size the card from a checkout quote.
  • Added card.issue, card.retrieve, card.close, and card.reveal.
CheckoutOrdersWebhooks

Order Status

  • Order status now reports the outcome: complete, partially_complete (see products[].status), or failed (see error). Previously a finished order always read complete.
  • If you poll until complete, also stop on partially_complete and failed.
  • Added the order.purchase.partially_complete webhook event. Each order fires exactly one of order.purchase.complete, order.purchase.partially_complete, or order.purchase.failed once its outcome is final.
  • orders.list accepts partially_complete and failed as status filters.
Search
  • Global text search now returns products from Henry’s catalog by default.
  • Searches that name a merchant, like “nike running shoes”, return that merchant’s products.
  • Results are priced in the currency of the market you search.
  • Global image search now includes products from Henry’s catalog. The x-henry-beta: image-index-search header is no longer needed.
  • With supportedOnly: true, every image result can be bought through Henry.
  • Merchant search accepts filters.imageUrl for merchants whose catalog supports image search.
CartCheckout

Shipping Errors in Checkout Details

  • Checkout details now returns SHIPPING_UNAVAILABLE when a product can’t ship to the buyer’s address, listing each affected product with the merchant’s reason. Currently for eBay listings.
MCP

Hosted MCP Server

  • The hosted MCP server at https://mcp.henrylabs.ai/mcp now accepts your Henry API key as x-api-key or Authorization: Bearer, so agents and scripts can connect without signing in.
  • The local @henrylabs/mcp package is retired. See MCP Server for setup.
  • The Henry plugin for Claude Code, Codex, and Cursor now uses the hosted server.
SDK
v1.17.0

SDK

  • Added card.tokenize, card.updateCvv, merchants.retrieve, and merchants.search to the SDK.
  • Breaking: removed mintedCards from orders.list and cart.checkout.pollPurchase responses.
  • Available in @henrylabs/sdk@1.17.0.
Checkout

Headless Checkout for Every Team

  • Headless checkout (cart.checkout.purchase) is now enabled for every team, no request needed. Pricing is unchanged. See the Headless Checkout guide.
Products

Price Filter

  • filters.price now applies to every merchant and to cached results.
  • Items priced in a different currency than filters.price.currency are returned rather than dropped.
Products

Price Filter

  • Product search now enforces filters.price.min and filters.price.max on returned prices.
  • When a product has several sellers, results use the first offer within your price range.
  • Pages may contain fewer than limit results - keep paging until nextCursor is null.
Products

Variant Prices

  • Product details options now include per-variant price and originalPrice.
  • Added the discontinued availability value for products or variants a merchant no longer sells. Search excludes them by default.
CartCheckout

Estimated Tax

  • Checkout details now returns costs.tax, an estimated sales tax for the shipping address, included in costs.total.
Pricing

Lower Credit Costs

  • Product details now costs 1 credit (down from 2).
  • Checkout details now costs 1 credit (down from 5).
  • See Pricing.
Products
v1.14.0

Sold-Out Products

  • Product search no longer returns out-of-stock products.
  • Pass filters.includeOutOfStock: true on a merchant search to include them.
  • Available in @henrylabs/sdk@1.14.0.
Dashboard

Buyer Emails

  • Turn each order email (received, complete, partially fulfilled, failed) on or off per app in Settings → App → General → Notifications.
  • Added an order-complete email, on by default.
Webhooks

Webhooks for Guest Orders

  • Fixed: webhooks now fire for hosted checkout orders from buyers without a Henry account.
Merchants
v1.13.0

Affiliate Rates

  • Merchant list and retrieve now return affiliate.maxCommissionRate, the highest commission rate Henry earns on that merchant. See Merchants.
Products
  • Product details now return an affiliateLink when Henry has affiliate coverage for the merchant. Purchases through it earn commission for your app.
  • Product details now rejects affiliate and tracking URLs in link.
Merchants

Merchant Search Filters

  • merchants.retrieve now returns searchFilters, the option values (like size and color) you can pass to merchant search. See Merchants.
Merchants
  • Added GET /v1/merchants/search for searching merchants by name or host. See Merchants.
  • Fixed: the name filter on merchant list now matches partial names.
Products
v1.12.0

Option Filters

  • Merchant search now accepts an options filter, like { "size": "M", "color": "black" }. See Product Discovery.
Merchants

Merchant Coverage

  • Merchant list and retrieve now return coverage per method: checkout, checkoutDetails, productDetails, and productSearch. See Merchants.
  • Added matching coverage filters to merchant list.
  • coverageStatus is deprecated in favor of coverage.checkout. It still works.
CartCheckout

Expired Security Codes

  • cart.checkout.purchase now returns a 400 when the card’s security code has expired. Re-collect it with the CVC Element and retry.
  • An unknown cardToken now returns a 404.
ProductsDashboard
v1.11.0
  • Global search now ranks products from checkout-supported merchants first.
  • Added a supportedOnly filter to global search. See Product Discovery.

Buyer Emails

  • Set a per-app support email in Settings → App, used as the reply-to on buyer emails.
  • Choose whether failed-order emails include recovery links in Settings → App → Notifications.
CartOrders
v1.10.0

Service Fee Fields

  • Breaking: commissionFeeFixed and commissionFeePercent are now serviceFeeFixed and serviceFeePercent in cart.create settings.
  • Breaking: costs.commissionFee is now costs.serviceFee in order results and webhooks.
  • Update your integration to the new names. Carts using the old names fall back to your app’s default fee.
  • Available in @henrylabs/sdk@1.10.0.
CartCheckoutOrdersProducts

Cart

  • The default cart service fee is now 0% (previously 5%). New carts are created with no service fee unless you explicitly set one.

Checkout

  • Checkout details now return a single, unified data result shape across methods - easier to parse and consistent regardless of the underlying merchant.
  • Added shipping cost estimation, so you can surface expected shipping before a purchase completes.
  • Faster checkout page load and clearer inline form validation messages.

Orders

  • Completed order results may now return null for tax and shipping when a merchant doesn’t itemize them, instead of failing validation.

Merchant Coverage

  • Expanded supported merchants for product search and details, including UNIQLO, Gap, Banana Republic, Mango, Nike, DSW, and Fashion Nova.
Cart
v1.5.0
  • Cart items now accept an optional affiliateProductLink field on cart.create, cart.item.add, and cart.item.update. Pass your partner tracking URL and Henry will use it for fulfillment while keeping the original link as the canonical product reference.
  • affiliateProductLink is also returned on purchase responses (cart.checkout.pollPurchase) and order list items, so you can reconcile attribution end-to-end.
  • If affiliateProductLink is omitted, Henry falls back to link - existing integrations are unaffected.
  • Available in @henrylabs/sdk@1.5.0.
Cart
v1.4.0

Cart Fetch

  • Added cart.fetch(cartId, { buyer? }) to retrieve a single cart by ID and optionally prefill buyer details in the returned checkoutUrl for hosted checkout.
  • Available in @henrylabs/sdk@1.4.0.
ProductsCart
v1.3.0

Product Discovery

  • products.search now supports merchant-scoped search via type: 'merchant', alongside existing text and image search.
  • mode: 'sync' added across products.search, products.details, and cart.checkout.purchase - wait up to 30s for results inline instead of polling.

Cart

  • cart.create settings now accept the full settings.events trigger model, including webhook, email, points, and tier actions with optional conditionals.
  • Released in @henrylabs/sdk@1.3.0.
SDK
v1.2.1

SDK

SDK
v1.1.2

SDK

SDKClient SDK
v1.0.0

Henry SDK v1

  • Shipped @henrylabs/sdk@1.0.0 - the stable TypeScript server SDK for product discovery, universal cart, checkout, and orders.
  • Cart creation now returns a ready-to-use checkoutUrl alongside cartId - no separate session step needed.
  • Unified async pattern (refId + poll*) across product search, product details, and headless checkout, with a new mode: 'sync' option to wait up to 30s inline.

Client SDK (Browser)

  • Introduced @henrylabs/js@1.0.0 - a framework-agnostic browser SDK for embedding checkout directly into your frontend.
  • Henry.createCheckoutElement(...) drops a buy-now button and modal onto any page with display modes for full, compact, comfortable, bubble, and direct.
  • Henry.createCardElement(...) renders an isolated iframe for PCI-safe card capture and returns a cardToken for server-side use with headless checkout.
v0.25.0

MCP Improvements

  • Added initial server instructions for MCP.

Bug Fixes

  • Fixed a memory leak related to abort signals in the client.
  • Fixed an issue where abort listeners were removed too early.
  • MCP no longer falls back to baseUrl when the environment variable is set.
  • Correctly defined the false enum type.
v0.24.0

Improvements

  • Merged staging into main.

Bug Fixes

  • Fixed MCP installation instructions for remote servers.
  • MCP now allows fallback behavior for required environment variables.
ProductsMCP
v0.22.1

Transaction Fee on Checkout

  • Charge users a transaction fee on checkout. This fee is applied to the total order amount. Currently for Enterprise customers only.

Saved Shipping Addresses for Guest Users

  • Now guest users can save multiple shipping addresses

Checkout MCP

  • Bug fixes and performance improvements
Products
v0.22.0

Concurrent Enrich & Variant Check Requests

  • Enrich and check variants in parallel, with up to 50 concurrent requests.
  • Now possible to batch enrich and check variants

Improved Product Search Filtering

  • Updated product text and image search parameters to include additional filters and sorting options.
  • Filter by brand, merchant, min/max price, sale status, and more.
  • Scope searches to country and region (Ex. us, Austin, Texas)
  • Sort results by relevance and price
CartCheckoutProducts
v0.22.0

Multi-Cart Checkouts

  • Checkout multiple items at once with our multi-cart checkout flow. Multi-cart checkout will work automatically without any code changes.
  • Users can add items to cart from any supported merchant, and they will be checked out together. Adding multiple items in a single request is currently experimental.

Save Additional Addresses & Payment Methods

  • Save additional address and payment methods for your users, making it easier than ever to place orders.
  • This feature is released along side with a visual refresh of our hosted checkout page.

Enrich Top-k Products

  • Now automatically enrich top-k products returned from Text Product and Image Product searches.
CheckoutOrders
v0.21.1

Custom Themes

  • In addition to adding your brand assets to emails and our hosted checkout page, you can now customize the color scheme of our checkout page and purchase confirmation email.

Order Management

  • Query all orders for a given user using our new Order List endpoint
ProductsCheckoutOrders
v0.18.0

Product Discovery

  • Introducing reverse image search. Search through 2b+ SKUs, enabling more intuitive and visual shopping experiences in your app.

Hosted Checkout

  • Added iFrame support with cookie-free checkout. Embed the checkout experience directly in your app without worrying about third-party cookie restrictions or cross-origin limitations.

Programmatic Email Inbox

  • All transactional emails, order confirmations, shipping updates, newsletters, and more are now captured and stored.
  • Query and access your users’ merchant emails programmatically, giving you full control to build custom order tracking, notifications, and support experiences.
CheckoutProducts
v0.17.0

Global Region Support

  • Now, allow users from anywhere in the world to route checkouts through Henry Labs
  • Initial support is for EU and UK regions in addition to existing US support. Wider global support coming soon

Product Enrichment Endpoints

  • Introduced Product Enrichment Endpoints, allowing you to get product price, variant information, stock availability for a product given its link
  • Endpoint is currently Experimental, with availability reserved for Plus Plan customers and above

API Playground

  • Added new API Playground for Sandbox and Production environments. Get started here
  • Intended for developers trying out our APIs. It’s recommended to save the Directory link to keep your documentation up to date with our latest API changes
Products
v0.15.0

Basic, Standard, and Plus Plans

  • Rolled out self-serve subscription plans for customers of all sizes.
  • No matter what stage your business is in, Henry Labs has a plan for you. Build embedded shopping experiences in your app today.

AI Agent in Quickstart Demo

Orders
v0.14.0

Enterprise Pro Plan

  • Introduced Enterprise Pro Plan, with full access to headless checkout, bespoke API features, 24/7 support, and more. For more information contact support@henrylabs.ai.

Email Whitelabeling

  • Email domain whitelabeling has been rolled out in production. Route merchant emails through your own domain, allowing you to control the end-to-end customer experience without comprimising user trust or ever managing returns.
CheckoutProductsWallet
v0.13.0

Checkout & Payment Experience

  • Visual refresh. Updated payment card designs, icons, dropdowns, and more.
  • Improved UI for CVV updates, payment method management, and shipping address autocomplete.

Product Search & Quickstart Demo

  • Expanded product details API to include reviews, video, stars, similar products, and related searches.
  • Quickstart Demo now renders new product details on demo.henrylabs.ai.

Hosted Checkout Whitelabeling

  • Add your brand logo to the hosted checkout modal.
OrdersCheckout
v0.12.0

Henry Managed Accounts

  • Introducing Henry Managed Accounts. Unlock the power of user merchant accounts fully managed by Henry Labs.
  • Track post-order states (shipping, returns, etc) so you can provide your customers real-time order updates.
  • Whitelabel merchant emails, build trust with your customers, and have full control over the E2E user experience.
  • Managed accounts are rolling out to all supported merchants

Hosted Checkout

  • Hosted checkout now supports updating CVV at point of checkout
Products
v0.11.0

Product Discovery

  • The result of variant checks is now reflected in our Hosted Checkout page

Henry Shopping SDK (TypeScript)

  • Introducing the Henry Shopping SDK, making it easier than ever to start building (Python SDK coming soon)

Henry MCP Server

  • Add an end-to-end embedded commerce stack to your agent application with less than 10 lines of code
CartWalletProducts
v0.10.0

Universal Cart

  • POST /cart/items now accepts affiliateProductLink, letting you pass through your partner tracking links end-to-end.
  • Added the optional checkVariantAvailability parameter so carts can auto-check the selected variant’s inventory when items are added. Feature is currently experimental.
  • Introduced a “blocklist” mode that allows any product to be added to cart and checked out except for those explicitly blocked.

Wallet

  • Added guest card collection mode for /wallet/cart-collect

Product Discovery

  • Released experiemental variant check endpoints. Use them to check real time stock availability of variants.

Henry Dashboard

  • Added staging vs. production environment flag to dashboard.

Miscellaneous

  • Added unified generated documentation at api.[sandbox].henrylabs.ai/docs