Zettle Product Library integration
The Zettle (by PayPal) Product Library holds a merchant's point of sale catalogue. List, read, create, update and delete products and their variants (prices, SKUs, barcodes, options, VAT, online store settings), bulk-import up to 2,000 products and follow the import, read the whole library or only the changes since a previous read, manage categories and discounts, count products, list option values and image URLs, and, for merchants that use US-style sales tax, manage tax rates and whether prices include tax. Images are uploaded with the separate Zettle Image API, and the older v1 product list is not exposed (list_products returns the same products). Authentication is Zettle OAuth 2.0 with the READ:PRODUCT and WRITE:PRODUCT scopes, connected with your own Zettle app credentials; every call works on the connected merchant's own library.
Say what should happen.
The workflow builds itself.
What you can do with Zettle Product Library
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Product, 7 operations
count_productsCount productsGETReturns the number of products in the library.create_productCreate productPOSTCreates a product with its variants. You generate the UUIDs of the product and of each variant. Prices are integers in minor currency units in the merchant's currency, and organizations that use VAT must send vatPercentage.delete_productDelete productDELETEDeletes one product and its variants.delete_productsDelete productsDELETEDeletes several products at once, by UUID.get_productGet productGETReturns one product with its variants, prices, category, options, online settings and etag (needed by update_product).list_productsList productsGETReturns every product visible in the point of sale, with all its variants, prices and settings, in one answer (no paging). With sort true the products are sorted by creation date.update_productUpdate productPUTUpdates a product as a JSON merge patch: only the fields sent change, a field sent as null is removed, and uuid and name are always sent.
Tax rate, 6 operations
count_products_per_tax_rateCount products per tax rateGETReturns, for each sales tax rate, how many products use it. Sales tax only: refused (403) for merchants in VAT countries.create_tax_ratesCreate tax ratesPOSTCreates up to 15 sales tax rates at once, each with a UUID you generate. Sales tax only: refused (403) for merchants in VAT countries.delete_tax_rateDelete tax rateDELETEDeletes a sales tax rate. Sales tax only: refused (403) for merchants in VAT countries.get_tax_rateGet tax rateGETReturns one sales tax rate. Sales tax only: refused (403) for merchants in VAT countries.list_tax_ratesList tax ratesGETLists the merchant's sales tax rates. Sales tax only: refused (403) for merchants in VAT countries.update_tax_rateUpdate tax ratePUTChanges the label, rate or default flag of a sales tax rate and returns it. Sales tax only: refused (403) for merchants in VAT countries.
Discount, 5 operations
create_discountCreate discountPOSTCreates a discount with a UUID you generate: either a fixed amount or a percentage. The answer carries no body; the Location and ETag headers point to the new discount.delete_discountDelete discountDELETEDeletes a discount from the product library.get_discountGet discountGETReturns one discount, with its etag for update_discount.list_discountsList discountsGETLists the discounts of the product library: a fixed amount or a percentage taken off a line item or the whole cart.update_discountUpdate discountPUTUpdates a discount as a JSON merge patch: only the fields sent change, and a field sent as null is removed. With If-Match, the update only applies if the discount was not changed since that etag (otherwise 412).
Import, 3 operations
get_import_statusGet import statusGETReturns the state of one bulk import (IMPORTING, FINISHED_SUCCESS or FINISHED_FAILED), with the error message of a failed one. Zettle recommends polling no more often than every 2 seconds; 300 items take about 5 seconds.get_latest_import_statusGet latest import statusGETReturns the state of the most recent bulk import (IMPORTING, FINISHED_SUCCESS or FINISHED_FAILED), with the error message of a failed one.import_productsImport productsPOSTStarts a bulk import of up to 2,000 products, which runs in the background, and returns its uuid and state; follow it with get_import_status. Only one import runs at a time. Every product and variant needs a UUID not already in the library.
V2, 3 operations
create_categoriesCreate categoriesPOSTCreates one or more categories. Each needs a UUID you generate and a name; a name that already exists is refused.delete_categoryDelete categoryDELETEDeletes a category of the product library.list_categoriesList categoriesGETLists the categories of the product library (UUID and name), which group products in the point of sale.
Tax settings, 2 operations
get_tax_settingsGet tax settingsGETReturns the organization's tax model (NONE, SALES_TAX or VAT) and whether prices include tax. Sales tax only: refused (403) for merchants in VAT countries.set_taxation_modeSet taxation modePUTSets whether the organization's prices include sales tax (INCLUSIVE) or have it added (EXCLUSIVE), and returns the settings. Sales tax only: refused (403) for merchants in VAT countries.
Category, 1 operation
rename_categoryRename categoryPATCHRenames a category. A name already used by another category is refused.
Image, 1 operation
list_imagesList imagesGETLists the URLs of the images used by the library items (products and discounts) of the organization, sorted by update date.
Library, 1 operation
get_libraryGet libraryGETReturns the whole library (products, discounts, and the UUIDs of deleted ones) in pages of up to limit items (500 by default). While more remain, the Link header holds the URL of the next page: call again with the offset found in that URL.
Product slug, 1 operation
create_product_slugCreate product slugPOSTGenerates a unique URL slug for a product name, to use in the product's online store settings (online.seo.slug).
Variant option, 1 operation
list_variant_optionsList variant optionsGETLists every variant option in use in the library (for example Size) with all its values.
Use Zettle Product Library from Claude Code, Cursor or Codex
Connect Zettle Product Library in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Zettle Product Library operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Zettle Product Library
- Create your workspace
Sign up free. Nothing to install.
- Connect Zettle Product Library once
Add your Zettle Product Library connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Zettle Product Library integration FAQ
What can you do with the Zettle Product Library integration?
LiveContext exposes 31 operations on Zettle Product Library, covering product, tax rate, discount and import.
