MerchantsCart
Unsupported Merchants Blocked From Checkout
- Checkout is no longer allowed for a merchant that is
unsupportedfor checkout, even with Experimental merchants on.cart.create,cart.item.add,cart.item.update, and placing the order return a403naming the merchant.testingmerchants are still allowed with the switch on. - Product search and details are unchanged. See Experimental merchants.
Location
- Merchant search accepts
filters.locationand product details acceptslocation:{ country, state, city, postalCode }. Best-effort - honored by merchants whose results depend on location, starting withfandango.com, which needspostalCodeto list showtimes. - Available in
@henrylabs/sdk@1.20.0, which also drops the merchantcategoriesfield and filter (see October 22).
Product SearchMerchants
Category Search on Zara
merchants.retrieveforzara.comreturnssearchFilters.category, and merchant search on Zara acceptsfilters.category.
MerchantsBreaking
Merchant Industry Categories Removed
- Breaking: merchants no longer carry a top-level
categoriesfield (the merchant’s industry, e.g.fashion_and_accessories), andmerchants.listno longer accepts acategoriesfilter. Remove any reads ofmerchant.categoriesbefore upgrading the SDK. - A merchant’s product categories are in
searchFilters.categoryonmerchants.retrieve, usable asfilters.categoryon merchant search.
Category Search
merchants.retrievereturnssearchFilters.category, the merchant’s categories. Shopify merchants only.- Merchant search accepts
filters.categoryto page through one category, or search within it withquery. 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 a403naming the merchant and the capability. - Coverage is checked per capability, so a merchant that is
supportedfor product search andtestingfor checkout can be searched but not purchased from. - The gates are merchant-scoped
products.search,products.details, andcart.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 orderedsupportedfirst, andfilters.supportedOnlynarrows 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, andcardClose, 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.
Merchant List Filter for Global Search
- Global text searches accept
filters.merchants, a list of merchant hosts or URLs to restrict results to. See the Product Discovery guide. - Available in
@henrylabs/sdk@1.18.0.
CardsCheckout
Statement Name
- Charges Henry Labs makes on a buyer’s card now read
HENRY LABS* <MERCHANT>on their statement, for exampleHENRY LABS* ZARA, instead ofHENRY* <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)
- 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.purchaseacceptscheckoutDetailsRefIdsto size the card from a checkout quote.- Added
card.issue,card.retrieve,card.close, andcard.reveal.
CheckoutOrdersWebhooks
Order Status
- Order
statusnow reports the outcome:complete,partially_complete(seeproducts[].status), orfailed(seeerror). Previously a finished order always readcomplete. - If you poll until
complete, also stop onpartially_completeandfailed. - Added the
order.purchase.partially_completewebhook event. Each order fires exactly one oforder.purchase.complete,order.purchase.partially_complete, ororder.purchase.failedonce its outcome is final. orders.listacceptspartially_completeandfailedasstatusfilters.
Search
Text 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.
Image Search
- Global image search now includes products from Henry’s catalog. The
x-henry-beta: image-index-searchheader is no longer needed. - With
supportedOnly: true, every image result can be bought through Henry. - Merchant search accepts
filters.imageUrlfor merchants whose catalog supports image search.
CartCheckout
Shipping Errors in Checkout Details
- Checkout details now returns
SHIPPING_UNAVAILABLEwhen 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/mcpnow accepts your Henry API key asx-api-keyorAuthorization: Bearer, so agents and scripts can connect without signing in. - The local
@henrylabs/mcppackage is retired. See MCP Server for setup. - The Henry plugin for Claude Code, Codex, and Cursor now uses the hosted server.
SDK
- Added
card.tokenize,card.updateCvv,merchants.retrieve, andmerchants.searchto the SDK. - Breaking: removed
mintedCardsfromorders.listandcart.checkout.pollPurchaseresponses. - 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.pricenow applies to every merchant and to cached results.- Items priced in a different currency than
filters.price.currencyare returned rather than dropped.
Products
Price Filter
- Product search now enforces
filters.price.minandfilters.price.maxon returned prices. - When a product has several sellers, results use the first offer within your price range.
- Pages may contain fewer than
limitresults - keep paging untilnextCursorisnull.
Products
Variant Prices
- Product details
optionsnow include per-variantpriceandoriginalPrice. - Added the
discontinuedavailability 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 incosts.total.
Pricing
Sold-Out Products
- Product search no longer returns out-of-stock products.
- Pass
filters.includeOutOfStock: trueon 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.
Products
Affiliate Links
- Product details now return an
affiliateLinkwhen 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
Merchants
Option Filters
- Merchant search now accepts an
optionsfilter, like{ "size": "M", "color": "black" }. See Product Discovery.
Merchants
CartCheckout
Expired Security Codes
cart.checkout.purchasenow returns a400when the card’s security code has expired. Re-collect it with the CVC Element and retry.- An unknown
cardTokennow returns a404.
Product Search
- Global search now ranks products from checkout-supported merchants first.
- Added a
supportedOnlyfilter 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.
Service Fee Fields
- Breaking:
commissionFeeFixedandcommissionFeePercentare nowserviceFeeFixedandserviceFeePercentincart.createsettings. - Breaking:
costs.commissionFeeis nowcosts.serviceFeein 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
dataresult 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
nullfortaxandshippingwhen 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.
Affiliate Product Links
- Cart items now accept an optional
affiliateProductLinkfield oncart.create,cart.item.add, andcart.item.update. Pass your partner tracking URL and Henry will use it for fulfillment while keeping the originallinkas the canonical product reference. affiliateProductLinkis also returned on purchase responses (cart.checkout.pollPurchase) and order list items, so you can reconcile attribution end-to-end.- If
affiliateProductLinkis omitted, Henry falls back tolink- existing integrations are unaffected. - Available in
@henrylabs/sdk@1.5.0.
Cart Fetch
- Added
cart.fetch(cartId, { buyer? })to retrieve a single cart by ID and optionally prefill buyer details in the returnedcheckoutUrlfor hosted checkout. - Available in
@henrylabs/sdk@1.4.0.
Product Discovery
products.searchnow supports merchant-scoped search viatype: 'merchant', alongside existing text and image search.mode: 'sync'added acrossproducts.search,products.details, andcart.checkout.purchase- wait up to 30s for results inline instead of polling.
Cart
cart.createsettings now accept the fullsettings.eventstrigger model, including webhook, email, points, and tier actions with optional conditionals.- Released in
@henrylabs/sdk@1.3.0.
SDK
- Published
@henrylabs/sdk@1.2.1with method signature updates and polling helper refinements.
SDK
- Published
@henrylabs/sdk@1.1.2with refreshed generated types.
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
checkoutUrlalongsidecartId- no separate session step needed. - Unified async pattern (
refId+poll*) across product search, product details, and headless checkout, with a newmode: '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 acardTokenfor 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
falseenum type.
v0.24.0
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
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
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.
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.
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
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
- Added AI Agent to Quickstart Demo. Try it out here.
- This agent is powered by Henry Shopping MCP
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.
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.
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
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
Universal Cart
POST /cart/itemsnow acceptsaffiliateProductLink, letting you pass through your partner tracking links end-to-end.- Added the optional
checkVariantAvailabilityparameter 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