Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget
Installing the Lua plugin on a WooCommerce store creates an agent that searches the store’s products, browses its categories, shows product details, builds a basket, and hands the end user a checkout link, on the storefront widget and every other channel. This is the catalog app; the Unified.to woocommerce integration type is a separate connection made with lua integrations connect --auth-method token (the only method lua integrations info woocommerce lists), described under Raw API access.Verified against lua-cli 3.33.0.Before you begin
A WordPress site with WooCommerce where you can install plugins.
A WooCommerce REST API key (WooCommerce › Settings › Advanced › REST API): the plugin registers your store with its consumer key and secret, which Lua validates against the store before creating the agent.
1
WordPress admin: install the plugin
Download the plugin zip, lua-shopping-assistant.zip, or ask Lua support ([email protected]) for it, then in Plugins › Add Plugin select Upload Plugin, choose the file, select Install Now, and then Activate Plugin.
Upload Plugin on the Add Plugin page.
2
WordPress admin: register the store and switch on the widget
The plugin adds Lua Shopping Assistant and Lua Widget Settings to the WooCommerce menu. Registration sends the store name, URL, and REST API key to Lua, which validates them against your store, creates the agent and its organization, runs the first catalog sync, and turns the widget on (bottom left, titled after the store).
The plugin's entries in the WooCommerce menu.
In Lua Widget Settings, tick Enable Lua Pop widget on storefront, set position and offsets, theme, button text, icon, and color, chat title, window size, and voice, and select Save Changes; the full option set is on Style the web widget.
Lua Widget Settings with the enable checkbox and appearance options.
3
Storefront: try it
Open the store, open the widget, and ask for a product or a category, for example “What do you have in the Gifts category?”. The agent lists categories, searches the synced catalog, sends product cards, and can add an item to the basket and return a checkout link.
Search products by description, get one product’s details, list the store’s categories, and send product cards.
Add to, remove from, show, and clear the end user’s basket (asking for the variation when a product has one), and check out: the agent creates the checkout on your store, returns its link for the end user, and records the order as pending.
The plugin doesn’t look up existing orders or shipments; add a tool for that (see Raw API access).
Products are fetched through the plugin’s REST endpoint every hour; without product webhooks, a change appears on the next refresh.
Products in stock are searchable; out-of-stock products are marked inactive.
A store with no conversation for 30 days stops refreshing until the next message arrives; a newly registered store always gets its first sync.
A 401, 402, 403, or 404 from the store pauses the sync for 24 hours; three in a row stop it until support restores it.
Your own tools read the same catalog through Products, and the baskets and checkouts through Baskets and Orders; the Shopify page shows a Products.search tool that works unchanged here. To add your own tools to this agent, run lua init --agent-id <id> in a new folder (find the ID with lua agents --json --ci), then follow Add a tool.
lua integrations connect --integration woocommerce --auth-method token connects a store through Unified.to with the REST API consumer key, consumer secret, and store URL, independently of the plugin: it provisions Unified.to’s commerce tools, four events (commerce_item.created, commerce_item.updated, commerce_itemvariant.created, commerce_itemvariant.updated), and Integrations.passthrough('woocommerce', …) for any WooCommerce REST endpoint. It doesn’t sync the catalog, fill Products or Baskets, or install the widget.
Registration validates the consumer key and secret against the store URL and refuses when the store doesn’t answer. Check the key is active and the URL is the site’s public address, then register again.
Products don't appear in chat
Out-of-stock products are inactive, and the first sync starts at registration and takes a while for a large catalog. Set the product in stock and try an exact product name.
Products stopped updating
The store was idle for 30 days, or it refused the sync (a 401, 402, 403, or 404 pauses it for 24 hours; three in a row stop it). A message to the agent re-arms an idle store; for a stopped sync, write to [email protected].
Position, colors, and text for the storefront widget.
Products reference
Search and read the synced catalog from your tools.
Channels
Sell on WhatsApp, Instagram, and Messenger with the same agent.
E-commerce example
A complete shopping agent built on the same APIs.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lua CLI","colors":{"primary":"#ff173a","light":"#fe1052","dark":"#fe1052"},"logo":{"light":"https://mintcdn.com/luaglobal/UOJyCcnsFnLhTG7C/logo/light.png?fit=max\u0026auto=format\u0026n=UOJyCcnsFnLhTG7C\u0026q=85\u0026s=69c56f899e0ed6e1baf7e8af2844aeda","dark":"https://mintcdn.com/luaglobal/UOJyCcnsFnLhTG7C/logo/dark.png?fit=max\u0026auto=format\u0026n=UOJyCcnsFnLhTG7C\u0026q=85\u0026s=cd36baf234c6b37e1fe2a2018ba0a46c"},"favicon":"https://mintcdn.com/luaglobal/UOJyCcnsFnLhTG7C/favicon.png?fit=max\u0026auto=format\u0026n=UOJyCcnsFnLhTG7C\u0026q=85\u0026s=8e869fe65763f56356c86d09dcaaf9a6","navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Platform","href":"https://heylua.ai"}},"footer":{"socials":{"discord":"https://discord.gg/SRPEuwCzaD"}},"integrations":{"gtm":{"tagId":"GTM-P43XVQLH"}},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"luaglobal","hasAudioNarration":false,"actualSubdomain":"luaglobal","customDomains":["docs.heylua.ai"],"gitSource":{"type":"github","owner":"lua-ai-global","repo":"lua-dev-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae461b581cc57ac631e8572","collectionId":"299034ac-7832-4815-a6ba-2ec3899a53bc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae461b581cc57ac631e8572"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ae461b581cc57ac631e8572","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Docs","count":178},{"language":"default","tag":"Reference","count":105},{"language":"default","tag":"CLI","count":42},{"language":"default","tag":"SDK","count":39},{"language":"default","tag":"Channels","count":38},{"language":"default","tag":"Build","count":30},{"language":"default","tag":"Concepts","count":26},{"language":"default","tag":"Primitives","count":25},{"language":"default","tag":"Ship logs to your stack","count":24},{"language":"default","tag":"REST API","count":24}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"integrations/woocommerce","slug":"/integrations/woocommerce","pageMetadata":{"title":"WooCommerce","description":"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget","type":"how-to","href":"/integrations/woocommerce"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,Columns,Frame,Heading,OptimizedImage,Step,Steps}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Installing the Lua plugin on a WooCommerce store creates an agent that searches the store’s products, browses its categories, shows product details, builds a basket, and hands the end user a checkout link, on the storefront widget and every other `,_jsx(_components.a,{href:`/channels/overview`,children:`channel`}),`. This is the catalog app; the Unified.to `,_jsx(_components.code,{children:`woocommerce`}),` integration type is a separate connection made with `,_jsx(_components.code,{children:`lua integrations connect --auth-method token`}),` (the only method `,_jsx(_components.code,{children:`lua integrations info woocommerce`}),` lists), described under `,_jsx(_components.a,{href:`#raw-api-access`,children:`Raw API access`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.em,{children:`Verified against lua-cli 3.33.0.`})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Before you begin`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A WordPress site with WooCommerce where you can install plugins.`}),`\n`,_jsxs(_components.li,{children:[`A WooCommerce REST API key (`,_jsx(_components.strong,{children:`WooCommerce`}),` › `,_jsx(_components.strong,{children:`Settings`}),` › `,_jsx(_components.strong,{children:`Advanced`}),` › `,_jsx(_components.strong,{children:`REST API`}),`): the plugin registers your store with its consumer key and secret, which Lua validates against the store before creating the agent.`]}),`\n`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`WordPress admin: install the plugin`,children:[_jsxs(_components.p,{children:[`Download the plugin zip, `,_jsx(_components.a,{href:`https://drive.google.com/file/d/16JQu-MYA05eoTFqV2SPFLk4f9IE7-GC-/view?usp=sharing`,children:_jsx(_components.code,{children:`lua-shopping-assistant.zip`})}),`, or ask Lua support (`,_jsx(_components.a,{href:`mailto:[email protected]`,children:`[email protected]`}),`) for it, then in `,_jsx(_components.strong,{children:`Plugins`}),` › `,_jsx(_components.strong,{children:`Add Plugin`}),` select `,_jsx(_components.strong,{children:`Upload Plugin`}),`, choose the file, select `,_jsx(_components.strong,{children:`Install Now`}),`, and then `,_jsx(_components.strong,{children:`Activate Plugin`}),`.`]}),_jsx(Frame,{caption:`Upload Plugin on the Add Plugin page.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=66afcd29dfc12fd959e6155c681b08ae`,alt:`WordPress Upload Plugin button`,\"data-og-width\":`599`,width:`599`,\"data-og-height\":`278`,height:`278`,\"data-path\":`images/integrations/wordpress-upload-plugin.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?w=280\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=c9a5ba709411ce799f0bba68ba18e82b 280w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?w=560\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=bccd5e054d3e8bc4742c67f3d4031607 560w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?w=840\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=a05a23ffccf2832577b162079af7a639 840w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?w=1100\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=fb07a28edb5a11771df8d20fa80ad89d 1100w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?w=1650\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=784cc1f137cf818d86746d49e24d45d4 1650w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/wordpress-upload-plugin.png?w=2500\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=b0ecc1b56269b362af4344d3a7863964 2500w`})})]}),_jsxs(Step,{title:`WordPress admin: register the store and switch on the widget`,children:[_jsxs(_components.p,{children:[`The plugin adds `,_jsx(_components.strong,{children:`Lua Shopping Assistant`}),` and `,_jsx(_components.strong,{children:`Lua Widget Settings`}),` to the WooCommerce menu. Registration sends the store name, URL, and REST API key to Lua, which validates them against your store, creates the agent and its organization, runs the first catalog sync, and turns the widget on (bottom left, titled after the store).`]}),_jsx(Frame,{caption:`The plugin's entries in the WooCommerce menu.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=dab976cf290122914f7347cc86f7df9c`,alt:`WooCommerce menu with Lua Shopping Assistant`,\"data-og-width\":`331`,width:`331`,\"data-og-height\":`291`,height:`291`,\"data-path\":`images/integrations/woocommerce-menu-lua.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?w=280\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=1d7ef896a1b03aa4e21e9f6ca01f866f 280w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?w=560\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=0657665ef4cc60b04de18c33b27e614f 560w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?w=840\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=daec53cbd22a33a62137a87d20c0a26b 840w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?w=1100\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=ac5a4bb639eea652b0605137c4c63ad8 1100w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?w=1650\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=859acc681da863146c7341a38b3a9cf7 1650w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/woocommerce-menu-lua.png?w=2500\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=3922ad23661650889776c95f31a8d935 2500w`})}),_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Lua Widget Settings`}),`, tick `,_jsx(_components.strong,{children:`Enable Lua Pop widget on storefront`}),`, set position and offsets, theme, button text, icon, and color, chat title, window size, and voice, and select `,_jsx(_components.strong,{children:`Save Changes`}),`; the full option set is on `,_jsx(_components.a,{href:`/channels/web-widget/styling`,children:`Style the web widget`}),`.`]}),_jsx(Frame,{caption:`Lua Widget Settings with the enable checkbox and appearance options.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=0c0c726a6c4658f3ac8aa5fe6f1a675a`,alt:`Lua Widget Settings page`,\"data-og-width\":`1103`,width:`1103`,\"data-og-height\":`1252`,height:`1252`,\"data-path\":`images/integrations/lua-widget-settings-page.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?w=280\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=51463dc4e2c01fc8491897417cded55b 280w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?w=560\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=504b8b4cddc9d24590ab00ae7977711c 560w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?w=840\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=ba55a1967b0f29927ecc374f56bee5b6 840w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?w=1100\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=3cab5f492d4380f7014f79094820e8a0 1100w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?w=1650\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=df85974a80bd38947b33593fbc39b6d3 1650w, https://mintcdn.com/luaglobal/EARtt-L80n6UOMXQ/images/integrations/lua-widget-settings-page.png?w=2500\u0026fit=max\u0026auto=format\u0026n=EARtt-L80n6UOMXQ\u0026q=85\u0026s=72c2e4c300e4856824d021807ecb5bff 2500w`})})]}),_jsx(Step,{title:`Storefront: try it`,children:_jsx(_components.p,{children:`Open the store, open the widget, and ask for a product or a category, for example “What do you have in the Gifts category?”. The agent lists categories, searches the synced catalog, sends product cards, and can add an item to the basket and return a checkout link.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-the-agent-can-do`,children:`What the agent can do`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Search products by description, get one product’s details, list the store’s categories, and send product cards.`}),`\n`,_jsx(_components.li,{children:`Add to, remove from, show, and clear the end user’s basket (asking for the variation when a product has one), and check out: the agent creates the checkout on your store, returns its link for the end user, and records the order as pending.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The plugin doesn’t look up existing orders or shipments; add a tool for that (see `,_jsx(_components.a,{href:`#raw-api-access`,children:`Raw API access`}),`).`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-the-catalog-stays-in-sync`,children:`How the catalog stays in sync`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Products are fetched through the plugin’s REST endpoint every hour; without product webhooks, a change appears on the next refresh.`}),`\n`,_jsx(_components.li,{children:`Products in stock are searchable; out-of-stock products are marked inactive.`}),`\n`,_jsx(_components.li,{children:`A store with no conversation for 30 days stops refreshing until the next message arrives; a newly registered store always gets its first sync.`}),`\n`,_jsx(_components.li,{children:`A 401, 402, 403, or 404 from the store pauses the sync for 24 hours; three in a row stop it until support restores it.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Your own tools read the same catalog through `,_jsx(_components.a,{href:`/reference/sdk/products`,children:_jsx(_components.code,{children:`Products`})}),`, and the baskets and checkouts through `,_jsx(_components.a,{href:`/reference/sdk/baskets`,children:_jsx(_components.code,{children:`Baskets`})}),` and `,_jsx(_components.a,{href:`/reference/sdk/orders`,children:_jsx(_components.code,{children:`Orders`})}),`; the `,_jsx(_components.a,{href:`/integrations/shopify#how-the-catalog-stays-in-sync`,children:`Shopify page`}),` shows a `,_jsx(_components.code,{children:`Products.search`}),` tool that works unchanged here. To add your own tools to this agent, run `,_jsx(_components.code,{children:`lua init --agent-id \u003cid>`}),` in a new folder (find the ID with `,_jsx(_components.code,{children:`lua agents --json --ci`}),`), then follow `,_jsx(_components.a,{href:`/build/add-a-tool`,children:`Add a tool`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`raw-api-access`,children:`Raw API access`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`lua integrations connect --integration woocommerce --auth-method token`}),` connects a store through Unified.to with the REST API consumer key, consumer secret, and store URL, independently of the plugin: it provisions Unified.to’s commerce tools, four events (`,_jsx(_components.code,{children:`commerce_item.created`}),`, `,_jsx(_components.code,{children:`commerce_item.updated`}),`, `,_jsx(_components.code,{children:`commerce_itemvariant.created`}),`, `,_jsx(_components.code,{children:`commerce_itemvariant.updated`}),`), and `,_jsx(_components.a,{href:`/integrations/passthrough`,children:_jsx(_components.code,{children:`Integrations.passthrough('woocommerce', …)`})}),` for any WooCommerce REST endpoint. It doesn’t sync the catalog, fill `,_jsx(_components.code,{children:`Products`}),` or `,_jsx(_components.code,{children:`Baskets`}),`, or install the widget.`]}),`\n`,_jsx(Heading,{level:`2`,id:`limits`,children:`Limits`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`One store per agent.`}),`\n`,_jsx(_components.li,{children:`No order lookup.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`if-it-isn’t-working`,children:`If it isn’t working`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Invalid WooCommerce credentials`,id:`invalid-woocommerce-credentials`,children:_jsx(_components.p,{children:`Registration validates the consumer key and secret against the store URL and refuses when the store doesn’t answer. Check the key is active and the URL is the site’s public address, then register again.`})}),_jsx(Accordion,{title:`Products don't appear in chat`,id:`products-dont-appear-in-chat`,children:_jsx(_components.p,{children:`Out-of-stock products are inactive, and the first sync starts at registration and takes a while for a large catalog. Set the product in stock and try an exact product name.`})}),_jsx(Accordion,{title:`Products stopped updating`,id:`products-stopped-updating`,children:_jsxs(_components.p,{children:[`The store was idle for 30 days, or it refused the sync (a 401, 402, 403, or 404 pauses it for 24 hours; three in a row stop it). A message to the agent re-arms an idle store; for a stopped sync, write to `,_jsx(_components.a,{href:`mailto:[email protected]`,children:`[email protected]`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`Style the web widget`,href:`/channels/web-widget/styling`,children:`Position, colors, and text for the storefront widget.`}),_jsx(Card,{title:`Products reference`,href:`/reference/sdk/products`,children:`Search and read the synced catalog from your tools.`}),_jsx(Card,{title:`Channels`,href:`/channels/overview`,children:`Sell on WhatsApp, Instagram, and Messenger with the same agent.`}),_jsx(Card,{title:`E-commerce example`,href:`/examples/ecommerce-assistant`,children:`A complete shopping agent built on the same APIs.`})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"WooCommerce","description":"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget","type":"how-to","href":"/integrations/woocommerce"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What the agent can do","slug":"what-the-agent-can-do","depth":2,"children":[]},{"title":"How the catalog stays in sync","slug":"how-the-catalog-stays-in-sync","depth":2,"children":[]},{"title":"Raw API access","slug":"raw-api-access","depth":2,"children":[]},{"title":"Limits","slug":"limits","depth":2,"children":[]},{"title":"If it isn’t working","slug":"if-it-isn’t-working","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"luaglobal","siteName":"Lua CLI","title":"WooCommerce - Lua CLI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-13T11:11:53.349Z","originalFileLocation":"integrations/woocommerce.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lua CLI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"WooCommerce - Lua CLI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lua CLI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.heylua.ai/integrations/woocommerce\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://luaglobal.mintlify.app/_mintlify/api/og/v2?division=Integrations\u0026amp;title=WooCommerce\u0026amp;description=Install+the+Lua+plugin+on+your+WordPress+store+to+give+your+agent+an+hourly+synced+catalog%2C+baskets%2C+checkout+links%2C+and+a+storefront+widget\u0026amp;theme=a3f5381ffcff7cb3f7370a15\u0026amp;signature=e33cb1efa701aee2632efec5ddbfac0cf9e53f280e831df3331fc84ada0480c6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"WooCommerce - Lua CLI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://luaglobal.mintlify.app/_mintlify/api/og/v2?division=Integrations\u0026amp;title=WooCommerce\u0026amp;description=Install+the+Lua+plugin+on+your+WordPress+store+to+give+your+agent+an+hourly+synced+catalog%2C+baskets%2C+checkout+links%2C+and+a+storefront+widget\u0026amp;theme=a3f5381ffcff7cb3f7370a15\u0026amp;signature=e33cb1efa701aee2632efec5ddbfac0cf9e53f280e831df3331fc84ada0480c6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/luaglobal/J64lPDADMxYATwfp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lua CLI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff173a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.heylua.ai/integrations/woocommerce\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/woocommerce.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.heylua.ai/#organization\",\"name\":\"Lua CLI\",\"url\":\"https://docs.heylua.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/luaglobal/UOJyCcnsFnLhTG7C/logo/light.png?fit=max\u0026auto=format\u0026n=UOJyCcnsFnLhTG7C\u0026q=85\u0026s=69c56f899e0ed6e1baf7e8af2844aeda\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.heylua.ai#website\",\"name\":\"Lua CLI\",\"url\":\"https://docs.heylua.ai\",\"publisher\":{\"@id\":\"https://docs.heylua.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.heylua.ai/integrations/woocommerce#webpage\",\"url\":\"https://docs.heylua.ai/integrations/woocommerce\",\"name\":\"WooCommerce\",\"description\":\"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget\",\"dateModified\":\"2026-09-13T11:11:53.349Z\",\"isPartOf\":{\"@id\":\"https://docs.heylua.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.heylua.ai/integrations/woocommerce#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.heylua.ai/integrations/woocommerce#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.heylua.ai/integrations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WooCommerce\",\"item\":\"https://docs.heylua.ai/integrations/woocommerce\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.heylua.ai/integrations/woocommerce#article\",\"headline\":\"WooCommerce\",\"name\":\"WooCommerce\",\"description\":\"Install the Lua plugin on your WordPress store to give your agent an hourly synced catalog, baskets, checkout links, and a storefront widget\",\"url\":\"https://docs.heylua.ai/integrations/woocommerce\",\"mainEntityOfPage\":{\"@id\":\"https://docs.heylua.ai/integrations/woocommerce#webpage\"},\"dateModified\":\"2026-09-13T11:11:53.349Z\",\"publisher\":{\"@id\":\"https://docs.heylua.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.heylua.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Lua CLI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Lua CLI","nav":{"global":null,"tabs":[{"tab":"Docs","groups":[{"group":"Get started","pages":[{"title":"Lua documentation","href":""},{"title":"Install the CLI and sign in","href":"/get-started/install"},{"title":"Build and release your first agent","sidebarTitle":"Quickstart","href":"/get-started/quickstart"},{"title":"Build a support agent","href":"/get-started/build-an-agent"},{"title":"Project structure","href":"/get-started/project-structure"},{"title":"Choose a primitive","href":"/get-started/choose-a-primitive"},{"title":"For operators","href":"/get-started/for-operators"},{"title":"Glossary","href":"/get-started/glossary"}]},{"group":"Concepts","pages":[{"title":"Agents","href":"/concepts/agents"},{"title":"Skills and tools","href":"/concepts/skills-and-tools"},{"title":"Persona","href":"/concepts/persona"},{"title":"Models","href":"/concepts/models"},{"title":"Environments","href":"/concepts/environments"},{"title":"Releases and versions","href":"/concepts/releases-and-versions"},{"title":"Execution contexts","href":"/concepts/execution-contexts"},{"title":"Credentials","href":"/concepts/credentials"},{"title":"Organizations and roles","href":"/concepts/organizations-and-roles"},{"title":"Approvers and notifications for shared agents","href":"/concepts/shared-agent-approvers"},{"title":"Channels","href":"/concepts/channels"},{"title":"Webhooks","href":"/concepts/webhooks"},{"title":"Triggers","href":"/concepts/triggers"},{"title":"Jobs","href":"/concepts/jobs"},{"title":"Workflows","href":"/concepts/workflows"},{"title":"Web apps","href":"/concepts/apps"},{"title":"Processors","href":"/concepts/processors"},{"title":"MCP servers","href":"/concepts/mcp-servers"},{"title":"Knowledge and features","href":"/concepts/knowledge-and-features"},{"title":"Integrations","href":"/concepts/integrations"},{"title":"Devices","href":"/concepts/devices"},{"title":"Voice","href":"/concepts/voice"},{"title":"Spaces","href":"/concepts/spaces"},{"title":"Governance","href":"/concepts/governance"},{"title":"Security and data","href":"/concepts/security-and-data"},{"title":"Agent templates","href":"/concepts/agent-templates"}]},{"group":"Build","pages":[{"title":"Add a tool to a skill","href":"/build/add-a-tool"},{"title":"Write skill context","href":"/build/write-skill-context"},{"title":"Call your API from a tool","href":"/build/call-your-api"},{"title":"Let your agent handle OAuth","href":"/build/handle-oauth"},{"title":"Store and search data","href":"/build/store-and-search-data"},{"title":"Identify users","href":"/build/identify-users"},{"title":"Handle a webhook","href":"/build/handle-a-webhook"},{"title":"Create a trigger","href":"/build/create-a-trigger"},{"title":"Schedule a recurring job","href":"/build/schedule-a-job"},{"title":"Send proactive messages","href":"/build/send-proactive-messages"},{"title":"Add human handoff","href":"/build/add-human-handoff"},{"title":"Add knowledge","href":"/build/add-knowledge"},{"title":"Use an MCP server","href":"/build/use-an-mcp-server"},{"title":"Use the browser","href":"/build/use-the-browser"},{"title":"Add a processor","href":"/build/add-a-processor"},{"title":"Compose agents","href":"/build/compose-agents"},{"title":"Supervise another agent","href":"/build/supervise-agents"},{"group":"Workflows","pages":[{"title":"Build and run your first workflow","href":"/build/workflows/quickstart"},{"title":"Author a workflow","href":"/build/workflows/authoring"},{"title":"Add approvals and signals","href":"/build/workflows/approvals-and-signals"},{"title":"Operate workflow runs","href":"/build/workflows/operate-runs"},{"title":"Use the Job tier","href":"/build/workflows/job-tier"},{"title":"Stage agent changes from a coding step","href":"/build/workflows/stage-agent-changes"},{"title":"Declare connections in a workflow","href":"/build/workflows/connections"},{"title":"Schedule a workflow and set goals","href":"/build/workflows/goals-and-schedules"},{"title":"Watch schedule health","href":"/build/workflows/schedule-health"},{"title":"Test a workflow offline","href":"/build/workflows/test-offline"}]},{"group":"Apps","pages":[{"title":"Build and open your first web app","href":"/build/apps/quickstart"},{"title":"Write routes and pages for a web app","href":"/build/apps/routes-and-pages"},{"title":"Talk to the agent from your app","href":"/build/apps/agent-pane"}]}]},{"group":"Channels","pages":[{"title":"Channels","href":"/channels/overview"},{"title":"Test an agent on Lua's channels","href":"/channels/quick-testing"},{"title":"Connect WhatsApp","href":"/channels/whatsapp"},{"title":"Connect Facebook Messenger","href":"/channels/messenger"},{"title":"Connect Instagram","href":"/channels/instagram"},{"title":"Connect Slack","href":"/channels/slack"},{"title":"Slack permissions","href":"/channels/slack-permissions"},{"title":"Connect Microsoft Teams","href":"/channels/teams"},{"title":"Bring your own Azure Bot to Teams","href":"/channels/teams-byo-azure-bot"},{"title":"Teams permissions","href":"/channels/teams-permissions"},{"title":"Connect email","href":"/channels/email"},{"title":"SMS and phone numbers","href":"/channels/sms-and-phone-numbers"},{"title":"Voice calls","href":"/channels/voice-calls"},{"title":"RCS","href":"/channels/rcs"},{"title":"iMessage","href":"/channels/imessage"},{"title":"Front","href":"/channels/front"},{"title":"MessageBird","href":"/channels/messagebird"},{"title":"Meetings","href":"/channels/meetings"},{"group":"Web widget","pages":[{"title":"Add the chat widget to your website","href":"/channels/web-widget/quickstart"},{"title":"Widget configuration","href":"/channels/web-widget/configuration"},{"title":"Style the widget","href":"/channels/web-widget/styling"},{"title":"Track widget events","href":"/channels/web-widget/events-and-analytics"},{"title":"Add the widget to a React, Vue, Angular, or Svelte app","sidebarTitle":"Frameworks","href":"/channels/web-widget/frameworks"},{"title":"Voice chat in the widget","href":"/channels/web-widget/voice-chat"},{"title":"Troubleshoot the widget","href":"/channels/web-widget/troubleshooting"}]},{"group":"Response formatting","pages":[{"title":"Response formatting","href":"/channels/formatting/overview"},{"title":"Block syntax","href":"/channels/formatting/syntax"},{"title":"list-item","href":"/channels/formatting/list-item"},{"title":"horizontal-list-item","href":"/channels/formatting/horizontal-list-item"},{"title":"actions","href":"/channels/formatting/actions"},{"title":"links","href":"/channels/formatting/links"},{"title":"images","href":"/channels/formatting/images"},{"title":"documents","href":"/channels/formatting/documents"},{"title":"form","href":"/channels/formatting/form"},{"title":"payment","href":"/channels/formatting/payment"},{"title":"flow","href":"/channels/formatting/flow"},{"title":"navigate","href":"/channels/formatting/navigate"},{"title":"reaction","href":"/channels/formatting/reaction"}]}]},{"group":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"},{"title":"Connect a Unified.to integration","href":"/integrations/connect"},{"title":"Subscribe to integration events","href":"/integrations/events"},{"title":"Manage integration MCP tools","href":"/integrations/mcp"},{"title":"Add a custom MCP server","href":"/integrations/custom-mcp-servers"},{"title":"Call an integration's API directly","href":"/integrations/passthrough"},{"title":"Shopify","description":"Install the Lua app from the Shopify App Store to give your agent a synced catalog, baskets, checkout links, and a storefront widget","href":"/integrations/shopify"},{"title":"WooCommerce","href":"/integrations/woocommerce"},{"title":"Square","description":"Authorize your Square account so the agent can search the catalog, look up orders, and create Square-hosted payment links","href":"/integrations/square-ecommerce"},{"title":"Square Appointments","href":"/integrations/square-appointments"},{"title":"SimplyBook.me","href":"/integrations/simplybook"}]},{"group":"Devices","pages":[{"title":"Build your first device","sidebarTitle":"Start here","href":"/devices/quickstart"},{"title":"The device connection lifecycle","sidebarTitle":"How devices work","href":"/devices/how-it-works"},{"title":"Create a device credential","href":"/devices/credentials"},{"title":"Node device client","sidebarTitle":"Node client","href":"/devices/node-client"},{"title":"Python device client","sidebarTitle":"Python client","href":"/devices/python-client"},{"title":"MicroPython device client","sidebarTitle":"MicroPython client","href":"/devices/micropython-client"},{"title":"MQTT protocol","href":"/devices/mqtt-protocol"},{"title":"Expose device commands as tools","href":"/devices/commands-and-tools"},{"title":"Handle device triggers","href":"/devices/triggers"},{"title":"Upload files from a device","href":"/devices/cdn-uploads"},{"title":"Device reliability and limits","sidebarTitle":"Reliability and limits","href":"/devices/reliability-and-limits"},{"group":"Device examples","pages":[{"title":"Control a laptop from chat","sidebarTitle":"Laptop controller","href":"/devices/examples/mac-controller"},{"title":"Run a device on a Raspberry Pi Pico W","sidebarTitle":"Raspberry Pi Pico W","href":"/devices/examples/raspberry-pi-pico"},{"title":"Build a warehouse station","sidebarTitle":"Warehouse station","href":"/devices/examples/warehouse-inventory"},{"title":"Run a smart office with device groups","sidebarTitle":"Smart office","href":"/devices/examples/smart-office"},{"title":"Monitor a machine with a Pico W","sidebarTitle":"Factory monitor","href":"/devices/examples/industrial-sensor"}]}]},{"group":"Ship and operate","pages":[{"title":"Test an agent before you release","href":"/ship/testing"},{"title":"Release an agent to production","href":"/ship/releasing"},{"title":"Run the go-live checklist","href":"/ship/go-live-checklist"},{"title":"Automate releases in CI","sidebarTitle":"Automate with --ci","href":"/ship/ci-and-automation"},{"title":"Read logs and debug an agent","href":"/ship/logs-and-debugging"},{"title":"Back up and restore agent source","href":"/ship/backups-and-restore"},{"title":"Platform limits","href":"/ship/limits"},{"title":"Troubleshoot the CLI","href":"/ship/troubleshooting"}]},{"group":"Ship logs to your stack","pages":[{"title":"Ship logs to your stack","href":"/drains/overview"},{"title":"Event schema","href":"/drains/event-schema"},{"title":"Emit your own fields","href":"/drains/emit-your-own-fields"},{"title":"Delivery records","sidebarTitle":"delivery","href":"/drains/sources/delivery"},{"title":"Workflow audit records","sidebarTitle":"workflow-audit","href":"/drains/sources/workflow-audit"},{"title":"Generic HTTPS","href":"/drains/generic-https"},{"title":"OpenTelemetry","href":"/drains/opentelemetry"},{"title":"Datadog","href":"/drains/datadog"},{"title":"Better Stack","href":"/drains/better-stack"},{"title":"Splunk","href":"/drains/splunk"},{"title":"Grafana Loki","href":"/drains/loki"},{"title":"Axiom","href":"/drains/axiom"},{"title":"New Relic","href":"/drains/new-relic"},{"title":"Sumo Logic","href":"/drains/sumo-logic"},{"title":"Object storage","href":"/drains/object-storage"},{"title":"Verify signatures","href":"/drains/verify-signatures"},{"title":"Protecting your destination","href":"/drains/protecting-your-destination"},{"title":"Delivery guarantees","href":"/drains/delivery-guarantees"},{"title":"Drain notices","href":"/drains/notifications"},{"title":"Usage and plan quotas","href":"/drains/usage-and-quotas"},{"title":"Egress addresses and delivery policy","href":"/drains/egress"},{"title":"Datadog monitor pack","href":"/drains/packs/datadog-monitors"},{"title":"Grafana dashboard","href":"/drains/packs/grafana-dashboard"},{"title":"OpenTelemetry Collector config","href":"/drains/packs/otel-collector"}]},{"group":"Marketplace","pages":[{"title":"Marketplace","href":"/marketplace/overview"},{"title":"Publish an agent template","href":"/marketplace/publish-a-template"},{"title":"Template manifest","href":"/marketplace/manifest"},{"title":"Lifecycle hooks","href":"/marketplace/lifecycle-hooks"},{"title":"Lints and consent","href":"/marketplace/lints-and-consent"},{"title":"Install and apply a template","href":"/marketplace/install-and-apply"},{"title":"Check fleet health","href":"/marketplace/fleet-health"},{"title":"Publish and install marketplace skills","href":"/marketplace/skills"}]},{"group":"Build with AI","pages":[{"title":"Build a Lua agent with a coding assistant","sidebarTitle":"Overview","href":"/build-with-ai/overview"},{"title":"Add the docs MCP server to your coding assistant","sidebarTitle":"Docs MCP server","href":"/build-with-ai/docs-mcp"},{"title":"Build with the Claude Code plugin","sidebarTitle":"Claude Code plugin","href":"/build-with-ai/claude-code-plugin"}]},{"group":"Examples","pages":[{"title":"Examples","href":"/examples/overview"},{"title":"Customer support agent","href":"/examples/customer-support"},{"title":"E-commerce shopping agent","href":"/examples/ecommerce-assistant"},{"title":"Healthcare patient portal","href":"/examples/healthcare-portal"},{"title":"Door access over WhatsApp","href":"/examples/iot-door-assistant"},{"title":"Greenhouse relay control","href":"/examples/iot-smart-light"}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/sdk/overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"WooCommerce - Lua CLI","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}