create_checkout
Create a hosted CHECKOUT LINK for a digital product / software / course through a merchant-of-record platform (the MoR is the seller and remits global sales tax / VAT). Returns checkout_url for the buyer to pay. One primitive across eight providers — pick with provider. item = the catalog id on that platform: Paddle price_id (pri_...), Lemon Squeezy variant_id (numeric, also needs store_id), Polar product_id (UUID), Whop plan_id (plan_...), Creem product_id (prod_...), Dodo product_id (pdt_...), FastSpring product path (also needs store_id = your storefront), 2Checkout catalog product code. Optional amount (major currency unit) is a custom price on Lemon Squeezy and drives the owner policy gate everywhere. Money flows buyer -> MoR -> merchant; this server never touches funds. Capabilities differ per provider (see per-field notes and INSTRUCTIONS). Credential headers (set once in your MCP client, per-request, never stored): x-mor-provider (paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout; or pass the provider argument) + x-mor-key (that platform's API key: Paddle pdl_..., Lemon Squeezy API key, Polar polar_oat_..., Whop key, Creem creem_test_..., Dodo key, FastSpring "username:password" for HTTP Basic, 2Checkout "MERCHANT_CODE:SECRET_KEY") + x-mor-env (sandbox/test = default no real money; prod/live = real money & real tax). Owner-policy headers x-agentpay-max-amount / x-agentpay-approval-above / x-agentpay-allowed-tools also apply.
Parameters9
| provider | string | optional | Merchant-of-record platform (or set the x-mor-provider header). paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout. |
| item | string | required | The item id to sell. Paddle = price_id (pri_...) to bill the catalog price, OR product_id (pro_...) together with amount + currency to charge a CUSTOM price (donations, pay-what-you-want, variable services); Lemon Squeezy = variant_id (numeric); Polar = product_id (UUID); Whop = plan_id (plan_...); Creem = product_id (prod_...); Dodo = product_id (pdt_...); FastSpring = product path. |
| store_id | string | optional | Required by Lemon Squeezy (your Store id) and FastSpring (your storefront, e.g. "yourstore" -> yourstore.onfastspring.com, used to build the hosted URL). Ignored by Paddle / Polar / Whop / Creem / Dodo. |
| quantity | integer | optional | Quantity (default 1). Supported by Paddle, Lemon Squeezy, Creem (units), Dodo, FastSpring; Polar and Whop checkouts are single-item. |
| amount | number | optional | Optional price in the MAJOR currency unit (e.g. 19.99). Paddle: a custom price when item is a product_id (pro_...) — also send currency. Lemon Squeezy = custom_price override. Other providers use the catalog price (amount only drives the owner policy gate). |
| currency | string | optional | ISO currency code (e.g. TWD, USD, JPY). Required by Paddle when item is a product_id (pro_...) and amount is a custom price. Zero-decimal currencies (JPY, KRW, VND, CLP, ISK) are converted correctly. |
| customer_email | string | optional | Optional buyer email to pre-fill on the checkout. Recommended for Dodo (its create requires a customer email). |
| country | string | optional | Dodo ONLY: 2-letter billing country code for the required billing address (default US; the buyer can change it on the hosted page). Ignored by other providers. |
| success_url | string | optional | Optional https URL to send the buyer to after payment. Used by Polar (success_url), Lemon Squeezy (redirect), Whop (redirect_url), Creem (success_url), Dodo (return_url). Paddle sets this in its dashboard, not per call. |
Raw schema
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"paddle",
"lemonsqueezy",
"polar",
"whop",
"creem",
"dodo",
"fastspring",
"twocheckout"
],
"description": "Merchant-of-record platform (or set the x-mor-provider header). paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout."
},
"item": {
"type": "string",
"description": "The item id to sell. Paddle = price_id (pri_...) to bill the catalog price, OR product_id (pro_...) together with amount + currency to charge a CUSTOM price (donations, pay-what-you-want, variable services); Lemon Squeezy = variant_id (numeric); Polar = product_id (UUID); Whop = plan_id (plan_...); Creem = product_id (prod_...); Dodo = product_id (pdt_...); FastSpring = product path."
},
"store_id": {
"type": "string",
"description": "Required by Lemon Squeezy (your Store id) and FastSpring (your storefront, e.g. \"yourstore\" -> yourstore.onfastspring.com, used to build the hosted URL). Ignored by Paddle / Polar / Whop / Creem / Dodo."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Quantity (default 1). Supported by Paddle, Lemon Squeezy, Creem (units), Dodo, FastSpring; Polar and Whop checkouts are single-item."
},
"amount": {
"type": "number",
"description": "Optional price in the MAJOR currency unit (e.g. 19.99). Paddle: a custom price when item is a product_id (pro_...) — also send currency. Lemon Squeezy = custom_price override. Other providers use the catalog price (amount only drives the owner policy gate). "
},
"currency": {
"type": "string",
"description": "ISO currency code (e.g. TWD, USD, JPY). Required by Paddle when item is a product_id (pro_...) and amount is a custom price. Zero-decimal currencies (JPY, KRW, VND, CLP, ISK) are converted correctly."
},
"customer_email": {
"type": "string",
"description": "Optional buyer email to pre-fill on the checkout. Recommended for Dodo (its create requires a customer email)."
},
"country": {
"type": "string",
"description": "Dodo ONLY: 2-letter billing country code for the required billing address (default US; the buyer can change it on the hosted page). Ignored by other providers."
},
"success_url": {
"type": "string",
"description": "Optional https URL to send the buyer to after payment. Used by Polar (success_url), Lemon Squeezy (redirect), Whop (redirect_url), Creem (success_url), Dodo (return_url). Paddle sets this in its dashboard, not per call."
}
},
"required": [
"item"
]
}