Skip to main content
Glama

create_checkout_page

Create a new checkout page with an attached product and pricing.

Use this tool whenever a merchant wants to start accepting payments. The page is always created published and is immediately available at its hosted URL.

When the request is vague, create a minimal checkout page. Do not overcomplicate the setup with extra fields, redirects, discounts, variants, images, tracking, or copy unless the user asked for them or they are clearly required.

Prefer plain text for titles, descriptions, confirmation copy, and email copy. Only use HTML when it is genuinely needed to accomplish the task, such as when the user explicitly asks for formatting that plain text cannot express.

For the page's design and customer-facing labels (including translations), set themeOverrides and hostedLayoutType; list_theme_properties lists what can be set. Set themeId (from list_themes) to use a theme.

Fields:

  • Omit fields to get the defaults: Name, Email address, and a required billing Address.

  • If you pass fields, include at least one email element with type: "email" and required: true, or the request fails.

  • When tax is off and nothing is shipped, pass fields with just a name and a required email field so customers are not asked for an address.

  • To collect an address, prefer a single element: "address" field with collect: "billing" (or "billing_and_shipping" when you also need a shipping address). It renders a grouped address with country selector. The flat-field types (address-line1, shipping-address-line1, etc.) still work for niche cases but should not be the default.

Tax settings:

  • Tax is enabled by default with mode: "stripe". Omit tax entirely unless the merchant explicitly asks to change tax behaviour.

  • Three modes are available via tax.mode:

    • "stripe" - Stripe Tax calculates tax automatically based on the customer's address. Requires an address field on the page (use element: "address") and Stripe Tax configured in the merchant's account.

    • "fixed" - A fixed tax rate is applied. Call list_tax_rates first to find an existing rate. Pass its id as productData.fixedTaxRateIds, or omit it to use the account's default rate. If no suitable rate exists, use create_tax_rate to create one first.

    • "none" - No tax is collected. Set tax.enabled: false and tax.mode: "none" (or just tax.enabled: false).

  • If the merchant sells B2B, add a Tax ID field such as a VAT number.

Payment options:

  • Only these enabled combinations are supported: full, invoice, partial, cash_on_delivery, full + invoice, full + partial, or full + cash_on_delivery.

Example uses:

  • "Create a checkout page for my $49 online course" - set name, productData.title, price.amount: 4900, price.currency: "usd"

  • "Create a monthly subscription at $29/month" - set price.amount: 2900, price.currency: "usd", price.recurring: { interval: "month", intervalCount: 1 }

  • "Create a 3-payment plan of $100 each" - set price.amount: 10000, price.currency: "usd", price.paymentPlan: { interval: "month", intervalCount: 1, planIterations: 3 }

  • "Create a pay-what-you-want page with a $5 minimum" - set price.amount: 500, price.payWhatYouWant: true

  • "Create a checkout page with a one-time price and a monthly subscription option" - set productData.prices: [{ billingType: "one_time", amount: 4900, currency: "usd", label: "One-time" }, { billingType: "recurring", amount: 1000, currency: "usd", label: "Monthly", recurring: { interval: "month", intervalCount: 1 } }]

  • "Create a checkout page with annual and monthly plans" - set productData.prices: [{ billingType: "recurring", amount: 9900, currency: "usd", label: "Annual", recurring: { interval: "year", intervalCount: 1 } }, { billingType: "recurring", amount: 1000, currency: "usd", label: "Monthly", recurring: { interval: "month", intervalCount: 1 } }]

After creation, return:

  • data.id: the checkout page ID

  • data.name: the internal page name

  • data.hostedUrl: the live checkout page URL

  • data.dashboardUrl: the dashboard edit URL

If the user is building or editing a website, call add_to_website next with pageId set to data.id and pageType: "checkout", and put the returned code in the site. Do not wait for the user to ask for this step.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
taxNoTax configuration for this page. Defaults to Stripe Tax when omitted.
feesNo
nameYesInternal page name used in your dashboard and API responses.
slugNoPage URL slug. For events and forms the slug defaults to the slugified version of your `title`. For checkouts the slug defaults to the slugified version of your `productData.title`.
fieldsNoCustom checkout fields to create. When provided, at least one field must be an `email` element with `type` `email` and `required` `true`. When omitted, the page gets Name and Email address fields, plus a required billing Address on checkout and event pages. Forms get Name and Email address only.
localeNo
themeIdNoThe theme the page uses: one of your themes or a built-in one (see List themes). `themeOverrides` apply on top. Leave it out to use your store's default theme.
imageIdsNoArray of images for the page gallery. All referenced file IDs must exist and belong to your account.
redirectNoIf enabled, redirects the customer to the specified URL before the page loads.
testmodeNoPuts the page in test mode. While it is on, every purchase on this page is a test purchase: no money is taken, the buyer still receives everything the page delivers, and the records are created with `livemode: false`. Turn it off to take real payments again.
funnelStepsNoOrdered funnel configuration for this page. Supports intermediate checkout steps, one-click upsells, and confirmation behavior.
googleIndexNoAllow Google to index this page for search results. Defaults to `true`.
notifyEmailNoEmail addresses to send notifications to. Supports comma separated emails.
productDataNo
redirectUrlNoURL to redirect to after payment. Applies if `afterPaymentAction` is `redirect`.
trackingCodesNoCustom tracking scripts to include on the page. Supports HTML `<script>` tags.
paymentMethodsNo
paymentOptionsNo
redirectPageIdNoID of the page (checkout, event or form) to redirect to after payment. Applies when `afterPaymentAction` is `checkout`.
themeOverridesNoThe page's design and labels, set on top of its theme and nested by theme property path: `tokens.colorPrimary` is sent as `{ "tokens": { "colorPrimary": { "light": "#1A73E8" } } }`. Keys you leave out keep their current value, and `null` resets a property, or everything under a key, to the theme default. Call `list_theme_properties` for the supported properties, their value formats and, where a property has a fixed one, its default.
invoiceSettingsNo
redirectUrlPathNoAdditional path parameters appended to the `redirectUrl`. Applies if `afterPaymentAction` is `redirect` and `redirectUrl` is set. [Learn more](https://checkoutpage.com/docs/articles/add-field-and-variant-data-to-redirect-url)
hostedLayoutTypeNo
redirectUrlQueryNoQuery parameters for the `redirectUrl`. Applies if `afterPaymentAction` is `redirect` and `redirectUrl` is set. [Learn more](https://checkoutpage.com/docs/articles/add-field-and-variant-data-to-redirect-url)
allowDynamicLabelNo
allowDynamicPriceNo
allowDynamicTitleNoAllow page title to be overridden via URL query parameters.
savePaymentMethodNo
afterPaymentActionNoBehavior after checkout. `confirmation` shows the confirmation page. `checkout` redirects to `redirectPageId`. `redirect` sends the customer to `redirectUrl`. Defaults to `confirmation`.
limitSubscriptionsNoDeprecated — superseded by `productData.limitSubscriptions.enabled`. Accepted and applied to the page's product.
checkoutAbandonmentNo
showCouponCodeFieldNo
sendEmailConfirmationNoSend an email confirmation to the customer. Defaults to `true`.
redirectUrlInsideEmbedNoIf the page is embedded, redirect the customer within the embed instead of redirecting the main browser window. Defaults to `false`.
allowDynamicDescriptionNoAllow page description to be overridden via URL query parameters.
allowDynamicRedirectUrlNo
sendPaymentNotificationNoSend payment/submission notification emails to the store owner.
showCouponCodeFieldTypeNo
closePopupOnClickOutsideNoWhether a popup embed closes when clicking outside the container. Defaults to `false`.
confirmationEmailMessageNoCustom confirmation email message. Accepts HTML or plain text.
confirmationEmailSubjectNoCustom confirmation email subject.
limitSubscriptionsStripeNoDeprecated — superseded by `productData.limitSubscriptions.limitSubscriptionsStripe.enabled`. Accepted and applied to the page's product.
confirmationCheckoutTitleNoConfirmation title.
confirmationEmailShowLogoNoShow store logo in confirmation email.
allowDynamicPlanIterationsNoAllow subscription plan iterations to be overridden via URL query parameters.
customizeEmailConfirmationNoUse a custom email confirmation template. If enabled, provide `confirmationEmailSubject` and `confirmationEmailMessage`.
confirmationCheckoutMessageNoConfirmation message. Accepts HTML or plaintext.
allowDynamicPreselectedPriceNo
customizeCheckoutConfirmationNoIf set to true `confirmationCheckoutMessage` and `confirmationCheckoutTitle` will be displayed on the confirmation page. Defaults to `false`.
confirmationEmailShowStoreNameNoShow store name in confirmation email.
allowDynamicDiscountedFromPriceNo
sendCanceledSubscriptionNotificationsNoSend notifications when subscriptions are canceled.
sendRecurringPaymentFailedNotificationsNoSend notifications when recurring payments fail.
enableFileAccessForInactiveSubscriptionsNoDeprecated — superseded by `productData.enableFileAccessForInactiveSubscriptions`. Accepted and applied to the page's product.
sendRecurringPaymentSucceededNotificationsNoSend notifications when recurring payments succeed.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false, destructive=false, openWorld=true), it discloses non-obvious behavior: the page is "always created published and immediately available at its hosted URL," tax defaults to Stripe mode, omitting `fields` yields specific defaults, and omitting the required email element causes the request to fail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is long, but for a 55-parameter tool the length is mostly justified and well-structured with bold section headers, front-loaded purpose, and worked examples. A few of the usage examples partially restate schema facts, but nothing is egregiously wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a highly complex creation tool, the description supplies guidance on defaults, failure conditions, tax/payment constraints, and the recommended follow-up call. It even restates the return fields (data.id, hostedUrl, dashboardUrl) despite an output schema existing, which is redundant but harmless and helps the agent chain the next step.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 55 parameters at 71% schema coverage, the description meaningfully supplements the schema for the highest-stakes fields: `fields` (email requirement, address grouping), `tax.mode`, the exact supported `paymentOptions` combinations, and `themeOverrides`/`hostedLayoutType`. Many lower-salience params (fees, funnelSteps, abandonment settings) are left to the schema, but the critical ones are covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb+resource+scope: "Create a new checkout page with an attached product and pricing." It is immediately distinguishable from siblings like create_event, create_form, and create_booking, which build other page types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it ("whenever a merchant wants to start accepting payments") and how to behave under ambiguity ("when the request is vague, create a minimal checkout page... do not overcomplicate"). It also names the follow-up sibling (add_to_website) with the condition that triggers it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources