lemon_squeezy_ cancel_ subscriptionCancel a subscription.
See what sold this month, refund an order, pause or upgrade a subscription, look up a customer by email, check a license key or send a checkout link, all in the store you pick when you connect.
PopMCPLemon Squeezy
Every endpoint of the Lemon Squeezy API is here, from products, variants and prices to usage records, webhooks and affiliates, with everyday sales, refund, subscription and license tools loaded first and the rest one search away.
72 tools in the full catalog: 51 read and 21 write. 32 load by default, and the rest are found with tool search.
lemon_squeezy_ cancel_ subscriptionCancel a subscription.
lemon_squeezy_ change_ subscription_ planUpgrade or downgrade a subscription to another variant (plan).
lemon_squeezy_ customer_ overviewEverything about one customer in one call, by email or customer_id: the customer record, their newest orders (number, status, total, product, receipt link), subscriptions (status, plan, renews_at, portal link) and license keys.
lemon_squeezy_ get_ customerGet one customer by id.
lemon_squeezy_ get_ subscriptionGet one subscription by id.
lemon_squeezy_ list_ customer_ ordersList every order one customer placed, newest first (the orders list cannot filter by customer).
lemon_squeezy_ list_ customersList customers, newest first: name, email, status (email marketing), city, region, country, total_revenue_currency and mrr in cents, and customer portal URLs.
lemon_squeezy_ list_ subscriptionsList subscriptions, newest first: user_name, user_email, product_name, variant_name, status (on_trial, active, paused, past_due, unpaid, cancelled, expired), renews_at, ends_at, trial_ends_at, card_brand, pause, and the customer portal and update-payment URLs.
lemon_squeezy_ pause_ subscriptionPause payment collection on a subscription.
lemon_squeezy_ resume_ subscriptionUndo a cancellation: a cancelled subscription still inside its grace period (before ends_at) goes back to renewing.
lemon_squeezy_ unpause_ subscriptionRestart payment collection on a paused subscription.
lemon_squeezy_ create_ discountCreate a discount code in the connected store.
lemon_squeezy_ create_ webhookSend the store's events to an https URL.
lemon_squeezy_ delete_ discountDelete a discount code.
lemon_squeezy_ list_ discountsList discount codes, newest first: name, code, amount with amount_type (percent: 10 = 10%, fixed: cents), status, duration, max_redemptions, starts_at, expires_at.
lemon_squeezy_ list_ license_ keysList license keys, newest first: key, key_short, user_email, status (inactive, active, expired, disabled), activation_limit, instances_count, expires_at, product and order ids.
lemon_squeezy_ list_ webhooksList the store's webhooks: url, events, last_sent_at, test_mode.
lemon_squeezy_ update_ license_ keyChange a license key: activation_limit (a number, or null for unlimited), expires_at (ISO date-time, or null for never) or disabled (true blocks it, false re-enables it).
lemon_squeezy_ generate_ order_ invoiceMake a downloadable PDF invoice for an order with the buyer's billing details.
lemon_squeezy_ get_ orderGet one order by id.
lemon_squeezy_ list_ ordersList orders, newest first: order_number, user_name, user_email, status (pending, failed, paid, refunded, partial_refund, fraudulent), total and total_formatted (cents, in the order's currency), total_usd, refunded_amount, first_order_item (product and variant) and the receipt URL.
lemon_squeezy_ list_ subscription_ invoicesList subscription invoices (each billing of a subscription), newest first: billing_reason (initial, renewal, updated), status (pending, paid, void, refunded, partial_refund), total and total_formatted in cents, total_usd, refunded_amount, user_email, card_brand and the invoice URL.
lemon_squeezy_ refund_ orderRefund an order in full, or partly with amount in CENTS of the order's currency.
lemon_squeezy_ refund_ subscription_ invoiceRefund one subscription payment in full, or partly with amount in CENTS.
lemon_squeezy_ create_ checkoutMake a checkout link for a variant to send to a buyer (returns url).
lemon_squeezy_ list_ variantsList a product's variants (the options a buyer picks: plans, tiers, license lengths) with name, status, sort, has_license_keys and license settings.
lemon_squeezy_ validate_ license_ keyCheck a license key string (as a customer pastes it): valid true or false, the error reason, status, activation_limit and activation_usage, expires_at, and meta with the product, variant, order and customer.
lemon_squeezy_ get_ productGet one product by id.
lemon_squeezy_ get_ storeGet the connected store: name, slug, domain, url, country, currency, plan, total_sales, total_revenue, thirty_day_sales and thirty_day_revenue (revenue in cents of USD).
lemon_squeezy_ list_ affiliatesList the store's affiliates, newest first: user_name, user_email, share_domain, status (active, pending, disabled), application_note, products, total_earnings and unpaid_earnings in cents.
lemon_squeezy_ list_ productsList the store's products in name order: name, status (draft or published), price and price_formatted (cents), from_price/to_price, buy_now_url, pay_what_you_want.
lemon_squeezy_ sales_ summaryTotal sales over a date range: order count by status, gross, refunds, net and tax (in USD and per currency, integer cents plus formatted USD), subscription renewal payments, and the top products.
lemon_squeezy_ create_ customerCreate a customer in the connected store.
lemon_squeezy_ list_ customer_ license_ keysList the license keys one customer owns, with status, activation_limit, instances_count and expires_at.
lemon_squeezy_ list_ customer_ subscriptionsList one customer's subscriptions with status, plan (product_name, variant_name), renews_at and ends_at.
lemon_squeezy_ update_ customerUpdate a customer's name, email, city, region or country, or archive them (status: archived stops marketing emails).
lemon_squeezy_ update_ subscriptionChange a subscription: switch plan (variant_id), pause or unpause payment collection, cancel or resume (cancelled), move the trial end (trial_ends_at) or the billing day.
lemon_squeezy_ delete_ webhookDelete a webhook.
lemon_squeezy_ get_ discountGet one discount by id.
lemon_squeezy_ get_ license_ keyGet one license key by its numeric id.
lemon_squeezy_ get_ license_ key_ instanceGet one license key activation by its numeric id.
lemon_squeezy_ get_ webhookGet one webhook by id.
lemon_squeezy_ list_ discount_ variantsList the variants a discount is limited to (empty when it applies to every product).
lemon_squeezy_ list_ license_ key_ instancesList the activations (instances: identifier and name) of a license key.
lemon_squeezy_ update_ webhookChange a webhook's url, events (the full new list) or secret.
lemon_squeezy_ generate_ subscription_ invoiceMake a downloadable PDF invoice for one subscription payment with the buyer's billing details.
lemon_squeezy_ get_ subscription_ invoiceGet one subscription invoice by id.
lemon_squeezy_ get_ subscription_ itemGet one subscription item by id.
lemon_squeezy_ get_ subscription_ item_ current_ usageGet the usage reported so far in the current billing period of an usage-based subscription item: period_start, period_end, quantity, interval_unit and interval_quantity.
lemon_squeezy_ list_ subscription_ itemsList the items of a subscription.
lemon_squeezy_ update_ subscription_ itemChange the seat count (quantity) of a quantity-based subscription.
lemon_squeezy_ activate_ license_ keyActivate a license key on a new device or site.
lemon_squeezy_ create_ usage_ recordReport usage for an usage-based subscription item (billed at the end of the period).
lemon_squeezy_ deactivate_ license_ keyRemove one activation from a license key, freeing it for another device.
lemon_squeezy_ get_ checkoutGet one checkout by id.
lemon_squeezy_ get_ usage_ recordGet one usage record by id.
lemon_squeezy_ get_ variantGet one variant by id.
lemon_squeezy_ get_ variant_ current_ priceGet the price a variant is sold at now: category (one_time, subscription, lead_magnet, pwyw), scheme (standard, package, graduated, volume), unit_price in cents, renewal_interval_unit/quantity, trial and setup fee.
lemon_squeezy_ list_ checkoutsList checkout links made through the API, newest first: url, custom_price, expires_at, test_mode and their options.
lemon_squeezy_ list_ usage_ recordsList usage reported for an usage-based subscription item, newest first.
lemon_squeezy_ get_ affiliateGet one affiliate by id.
lemon_squeezy_ get_ discount_ redemptionGet one discount redemption by id.
lemon_squeezy_ get_ fileGet one file by id with a fresh signed download_url (valid for an hour).
lemon_squeezy_ get_ order_ itemGet one order item by id.
lemon_squeezy_ get_ priceGet one price by id.
lemon_squeezy_ list_ discount_ redemptionsList the times a discount was used: discount_code, discount_amount (cents or percent per amount_type), order_id.
lemon_squeezy_ list_ filesList the downloadable files attached to a variant: name, size, size_formatted, version and a signed download_url that expires after an hour.
lemon_squeezy_ list_ order_ itemsList order line items.
lemon_squeezy_ list_ pricesList a variant's prices, newest first (the current one plus earlier ones that existing subscriptions may still pay).
lemon_squeezy_ list_ storesList the store this connection is bound to.
lemon_squeezy_ get_ authenticated_ userGet the Lemon Squeezy user the API key belongs to: name, email, avatar.
lemon_squeezy_ list_ related_ resourcesFollow any documented relationship of a record (the API's nested queries), e.g. resourceType orders + relationship license-keys, subscriptions + subscription-invoices, variants + files, subscription-items + usage-records.
Credentials off one Lemon Squeezy screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In Lemon Squeezy, open Settings, then API, create a key named PopMCP and copy it, with test mode off for your real sales. Paste the key and pick the store this connection is for. There is no app to register and no approval to wait for.
••••••••••••3f7aRefunds, plan changes, cancellations, discount codes and webhooks take effect the moment the AI calls them, and a live key touches real customers. Each connection reaches only its own store; keep reporting teammates on read-only, or connect a test mode key first.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Lemon Squeezy credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
How much did my Lemon Squeezy store make last month after refunds, and which products sold best?
lemon_squeezy_sales_summaryok
Then just ask for the work
“How much did my Lemon Squeezy store make last month after refunds, and which products sold best?”
“Refund order #1042 in full and tell me what was bought”
“Which subscriptions are past due, and who are those customers?”
“Create a 20% off code SPRING20 for the Pro plan that expires on Sunday”
“Is this license key valid, and how many activations does it have left?”
“Make a checkout link for the Team plan with jane@example.com filled in”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Lemon Squeezy behind an AI client.
One API key. In your Lemon Squeezy dashboard open Settings, then API, create a key and copy it straight away, because it is shown only once. Paste it into PopMCP, then choose which of your stores the connection is for. There is no OAuth app, redirect URL or review, and the key is stored encrypted and used only on PopMCP's servers.
Yes. After the key is checked, PopMCP lists every store it reaches and you put each one in its own workspace, because each store has its own currency, products and payouts. A connection only ever reaches its own store: a request that names an order, customer or subscription from another store is refused before anything is sent.
Yes. A key made while test mode is on sees only test orders, subscriptions and customers, which is a safe way to watch what an agent does. Make a key with test mode off for your real sales. PopMCP shows which kind you connected, and keys expire a year after they are made.
Yes. refund_order and refund_subscription_invoice send money back in full or in part, and change_subscription_plan, pause_subscription, cancel_subscription and resume_subscription change what a customer pays. They run as soon as the AI calls them, so keep teammates who only need reports on read-only.
All of it: 70 operations across stores, customers, products, variants, prices, files, orders, order items, subscriptions, subscription invoices and items, usage records, discounts and redemptions, license keys and activations, the License API, checkouts, webhooks and affiliates, plus sales_summary and customer_overview. Thirty-two load into your AI client by default and the rest stay searchable.
Webhook triggers cover new and refunded orders, customer updates, the whole subscription lifecycle (created, updated, cancelled, resumed, expired, paused and unpaused), subscription payments that succeed, fail, recover or are refunded, license keys issued or changed, and affiliates activated. New products and discount codes are picked up by checking the store.
Three things. Every amount is in cents, so 1999 means 19.99. An order's id is not its order number, which is why list_orders can search by order number first. And orders cannot be filtered by date, so sales_summary reads newest first until it passes the start of your range, adding subscription renewals, which Lemon Squeezy keeps as subscription invoices rather than orders.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Lemon Squeezy in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Lemon Squeezy on the consent screen. The Lemon Squeezy tools are then available in that session, and no Lemon Squeezy credential is stored on your machine.
Loading 72 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 32-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 72 here. A trigger is something PopMCP watches for you: 19 Lemon Squeezy events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Lemon Squeezy.
Launch a hosted MCP endpoint for Lemon Squeezy, keep tool access under control, and start testing real workflow prompts right away.