Skip to main content
Glama

Server Details

Create and manage checkout pages, event ticketing, forms, customers, payments and subscriptions.

Ownership verified
Status
Healthy
Uptime
0.7% over 59 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 58 tools

Disambiguation4/5

Each tool targets a distinct resource+action (pages, events, forms, products, coupons, themes, tickets, bookings, payments, subscriptions, invoices, webhooks), so boundaries are generally clear. The main risk is the six near-identical record-listing tools (list_payments, list_bookings, list_subscriptions, list_subscription_payments, list_invoices, list_submissions) for a single 'order' lookup, but the descriptions provide explicit cross-tool routing to steer selection.

Naming Consistency5/5

Nearly all tools follow a strict verb_noun snake_case pattern (list_*, get_*, create_*, update_*, delete_*, archive_*, regenerate_*, upload_*). The few deviations (add_to_website, prepare_subscription_cancellation) still conform to verb_noun form and are semantically meaningful, not arbitrary.

Tool Count3/5

58 tools is well above the typical 3-15 sweet spot, but the server covers a genuinely broad commerce platform (15+ resource types each with roughly CRUD-level operations), so the count is more defensible than a typical over-exposed surface. It remains heavy and likely overwhelms an agent's selection context.

Completeness4/5

Coverage is extensive: create/get/list/update for pages, events, forms, products, coupons, themes, tickets, submissions, customers and webhooks, plus bookings, payments, subscriptions, invoices and tax rates. Gaps are deliberate read-only deferrals (no refund, cancel, or destructive delete operations; those route to the dashboard), plus no archive/delete for pages, which agents can work around.

Available Tools

58 tools
add_to_websiteA
Read-only
Inspect

Get ready-to-paste code that puts a checkout page, form, or event on a website: an inline embed, a popup button, or a plain link, as HTML and as a React component. Use it right after create_checkout_page, create_form, or create_event when the user is building or editing a website, or when the user asks to add a checkout, buy button, ticket form, or signup form to their site. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoHow the page shows on the website. `inline` renders it inside the page where the code is placed. `popup` opens it in an overlay when a customer clicks a button or link. `link` sends the customer to the hosted page. Omit to get all three and pick one.
pageIdYesThe ID of the checkout page, form, or event. Get it from create_checkout_page, create_form, create_event, or the list_* and get_* tools.
pageTypeYesThe kind of page: `checkout` for checkout pages, `form` for forms, `event` for events. It must match the page, or the page is not found.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesReady-to-paste code that adds a Checkout Page page to a website.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description repeats 'Read-only' and adds that output comes as HTML and a React component, which is useful formatting context. It does not add behavioral details beyond the annotations, such as permission requirements or error behavior, so a baseline 3 is appropriate.

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

Conciseness5/5

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

Two sentences with zero waste: the first sentence front-loads what the tool returns, and the second provides precise usage context. Every sentence earns its place and the structure is easy to scan.

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 simple read-only code-generation tool with 100% schema coverage, full annotations, and an output schema, the description covers purpose and usage adequately. Return values are handled by the output schema, so the description does not need to explain them.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters, including the mode and pageType enums, are fully documented in the schema. The description adds no additional parameter meaning or usage constraints. Baseline 3 is correct when the schema does the heavy lifting.

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 description states a specific verb and resource: 'Get ready-to-paste code that puts a checkout page, form, or event on a website.' It explicitly distinguishes the tool from sibling creation tools by naming create_checkout_page, create_form, and create_event as preceding actions. An agent can tell this is a code-generation/embed tool, not a creator or updater.

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

Usage Guidelines4/5

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

It gives clear triggering conditions: 'Use it right after create_checkout_page, create_form, or create_event when the user is building or editing a website, or when the user asks to add a checkout, buy button, ticket form, or signup form to their site.' This covers when to use it well. However, it does not name alternatives or explicitly state when not to use it, so it falls short of the top score.

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

archive_ticket_typeA
Destructive
Inspect

Archive one ticket type on an event so it is no longer on sale. It is archived, not deleted: its data and the tickets already sold are kept, and get_event still lists it with status archived. Ticket types it triggered lose that trigger. Get the event, group and ticket type IDs from get_event. Mutating.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the event. Event IDs come from list_events, or the `id` that create_event returns.
ticketTypeIdYesThe ID of the ticket type. get_event lists each group's ticket types under `ticketGroups[].ticketTypes[].id`.
ticketGroupIdYesThe ID of the ticket group the ticket type is in, from `ticketGroups[].id` in get_event.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and destructiveHint=true, and the description meaningfully extends them: the operation is reversible-in-spirit ('archived, not deleted'), data and sold tickets are retained, get_event still lists it with status archived, and dependent ticket types lose their trigger. That is exactly the kind of consequence disclosure an agent needs before mutating.

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

Conciseness5/5

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

Four short sentences, front-loaded with the action, then consequences, then ID sourcing. No filler and no repetition of the schema.

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 single-resource mutation with full schema coverage and an output schema, nothing needed to invoke it correctly is missing: what it does, what it does not do, side effects on dependent types, and where the IDs come from.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already documents its source in get_event, so the schema does the heavy lifting. The description only restates the sourcing hint and adds no format or constraint detail beyond it.

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?

States a specific verb and resource ('Archive one ticket type on an event') plus the observable effect ('no longer on sale'). It is clearly distinguishable from update_ticket_type and from any delete-style sibling.

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

Usage Guidelines4/5

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

It explains the archive-vs-delete distinction and where to obtain the three required IDs ('Get the event, group and ticket type IDs from get_event'). It does not explicitly contrast with update_ticket_type for near-identical outcomes (e.g. simply hiding a type), so it falls short of full when/when-not routing.

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

create_bookingA
Destructive
Inspect

Create a real event booking on an existing event, without collecting card payment.

This writes live data and has customer-visible side effects - it is not a dry run or a preview. Tickets are issued, a confirmation email with the ticket PDF is sent to the customer, live-mode bookings decrement the ticket type's remaining capacity (test-mode bookings do not), the booking.paid webhook fires, and an invoice may be generated. There is no undo through this API: cancellations, refunds and ticket transfers must be done in the Checkout Page dashboard. Confirm the event, the ticket quantities and the customer's email with the merchant before calling it.

Not idempotent - never retry blindly. Every call creates a new booking, so calling again after a timeout or an unclear error can issue duplicate tickets and send a second confirmation email. If the outcome of a call is uncertain, check list_bookings (search by the customer's email) before trying again.

No card payment is collected. There are two booking strategies, and exactly one of them must be supplied:

  • paymentOption.manualType records the booking as unpaid with the full amount as its balance due, settled outside checkout by invoice (invoice) or on arrival (cash_on_delivery); a free booking simply has nothing due. Use it for box-office and phone bookings, invoiced corporate registrations, and migrating bookings in.

  • complimentary: true records the booking as paid with amount, amountPaid and amountDue of 0 and isComplimentary: true. The ticket lines keep their face value and a matching complimentaryDiscountAmount brings the total to 0, so the forgone revenue stays visible on the booking and its invoice. Use it for comped guests, speakers, staff and press. No coupon can be applied.

Neither strategy takes a card payment: that belongs on the event's own checkout.

The storefront guards still apply, exactly as they would for a buyer checking out:

  • 409 — the ticket type or its ticket group is sold out, or the requested quantity exceeds remaining capacity.

  • 409 - tickets are not on sale: the sale window has not opened or has closed, or the ticket type or its ticket group is disabled. A disabled ticket cannot be booked by any strategy, complimentary included.

  • 403 — the event's registration limit has been reached.

  • 400 — a required field is missing, a required address sub-field is missing, or the email value is not a valid address.

  • 400 — the seller account is not connected to Stripe.

  • 429 - the store has reached its daily limit on added bookings.

  • 400 - both paymentOption and complimentary: true were supplied, or neither was. Exactly one is required.

  • 400 - a couponId was supplied on a complimentary booking. A comp is already at zero, so no coupon can be applied.

Example uses:

  • "Comp two VIP tickets for jane@example.com on the Summer Gala" → complimentary: true

  • "Register Acme Corp for 10 standard tickets to the conference and invoice them" → paymentOption: { manualType: 'invoice' }

  • "Add a walk-in booking for the Tuesday workshop, paying cash on arrival" → paymentOption: { manualType: 'cash_on_delivery' }

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesValues for the event's fields. Must include a value for the event's email field - the booking's customer is created from it.
eventIdYesThe ID of the event to book onto.
ticketsYesTicket types to book, keyed by ticket type ID with the quantity as the value. Use the event to discover ticket type IDs. A disabled ticket type, or one in a disabled ticket group, cannot be booked.
couponIdNoA coupon to apply to the booking.
complimentaryNoIssue the tickets at no charge. The booking is recorded as `paid` with `amount`, `amountPaid` and `amountDue` of 0, `isComplimentary: true`, and the ticket lines at their face value with a matching complimentary discount. Mutually exclusive with `paymentOption` and `couponId`.
paymentOptionNoHow a manually settled booking is paid for. This endpoint never collects card payment: the booking is recorded as unpaid with the amount as its balance due - for a free booking that balance is zero. Settlement happens outside checkout. Omit it and pass `complimentary: true` instead to issue the tickets at no charge.
queryParametersNoAttribution or tracking parameters to record against the booking, mirroring the query string a storefront checkout captures from its page link. Stored on the booking and included in exports; not used in pricing.
ticketPwywAmountsNoChosen amounts for pay-what-you-want ticket types, keyed by ticket type ID, in the smallest currency unit. Required for any pay-what-you-want ticket type included in `tickets`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only flag destructive/write; the description goes far beyond, disclosing the concrete side effects that make it destructive (tickets issued, PDF confirmation email sent, capacity decremented in live mode, booking.paid webhook fires, invoice may be generated), the absence of undo through this API, and the non-idempotency warning against blind retries. These are exactly the traits annotations cannot convey.

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?

Bold front-loaded warnings and bulleted strategy/error blocks make it scannable despite being long. It is dense but almost every line earns its place; the nine-point error list is arguably more than strictly needed, slightly diluting structure.

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?

A destructive, non-idempotent mutation tool with 8 params and an output schema present; the description covers side effects, no-undo path, exclusivity rules, capacity/sold-out guards with specific status codes, and worked examples. An agent has everything needed to call it safely and interpret failures.

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?

Schema coverage is 100%, so baseline is 3, but the description adds real semantic value the schema does not: it explains the exclusivity constraint between paymentOption and complimentary, the meaning of each manualType ('unpaid with full amount as balance due, settled outside checkout'), and that complimentary records paid with isComplimentary true. It omits notes on couponId incompatibility with comp (covered in errors) and fields/ticketPwywAmounts semantics, keeping it from a 5.

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?

States a specific verb+resource ('Create a real event booking on an existing event') and crucially distinguishes scope from siblings by declaring it does NOT collect card payment, which separates it from create_checkout_page. An agent can route between this and checkout instantly.

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?

Explicitly enumerates when to use each of two mutually exclusive strategies (paymentOption.manualType vs complimentary: true) with named scenarios (box-office, phone, invoiced corporate, migrations vs comped guests, speakers, staff, press). It also routes recovery: 'If the outcome of a call is uncertain, check list_bookings before trying again.'

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

create_checkout_pageAInspect

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.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
dataYes

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.

create_couponAInspect

Create a coupon for Checkout Page.

Use this when a merchant wants a discount code that customers can enter on eligible pages.

How page restrictions work:

  • Omit both pageIds and ticketTypeIds to create a coupon that is usable on all checkout pages and events.

  • Set pageIds to restrict the coupon to one or more specific pages.

  • ticketTypeIds are narrower than pageIds: they restrict the coupon to specific ticket types within an event.

  • If the page is an event, you must first restrict the coupon to that event by including the event page ID in pageIds, and only then can you narrow it to certain tickets from that event with ticketTypeIds.

  • Do not pass ticketTypeIds by themselves. Every ticket type must belong to one of the pageIds provided, or the request fails.

How discount types work:

  • amountOff is a fixed amount discount. It requires currency.

  • percentOff is a percentage discount applied to the eligible checkout total.

  • Set exactly one of amountOff or percentOff, never both.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe coupon code a customer enters.
labelYesInternal name for the coupon.
pageIdsNoA list of pageIds that this coupon can be used within.
currencyNoThree-letter ISO code for the currency of the amountOff parameter. Required when `amountOff` is set, and not allowed when `percentOff` is set.
durationYesHow long the discount lasts: `once` applies to the first eligible payment, `repeating` applies for a fixed number of months, and `forever` applies until canceled or expired.
redeemByNoThe ISO datetime that this coupon must be used before.
amountOffNoA positive integer representing the amount to subtract from an invoice total (required if `percentOff` is not passed).
percentOffNoA positive float larger than 0, and smaller or equal to 100, that represents the discount the coupon will apply (required if `amountOff` is not passed).
ticketTypeIdsNoList of ticket type IDs that this coupon can be used with. Ticket ticket ids must belong to a page specified in the `pageIds` array.
maxRedemptionsNoThe total number of times this coupon can be redeemed across all customers. Doesn't limit a single customer from redeeming multiple times. Omit for unlimited redemptions.
durationInMonthsNoA positive integer representing the number of months the coupon applies for. Required when `duration === repeating`, and not allowed when `duration` is `once` or `forever`.
appliesToSetupFeeNoWhen enabled, applies this coupon discount to the setup fee.
appliesToTicketFeesNoWhen enabled, applies this coupon discount to ticket-level fees on event pages as well as the ticket prices. Defaults to false, which leaves ticket fees undiscounted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, non-open-world mutation, so the safety profile is covered. The description adds genuine behavioral rules beyond that: the pageIds/ticketTypeIds dependency and the hard failure ("or the request fails") when ticket types are passed without their parent page. It omits error behavior for duplicate codes and permission/auth requirements, keeping it out of the top band.

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

Conciseness5/5

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

The purpose and trigger are front-loaded, then two bolded sections group closely related constraints. For a 13-parameter tool every sentence carries distinct operational information with no repetition of schema text.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and annotations cover mutation safety. The description supplies the conditional logic needed to build a valid request, though it says nothing about duplicate-code handling or what the created coupon response contains.

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?

Schema coverage is 100%, so the baseline would be 3, but the description adds real cross-parameter meaning: the hierarchical constraint that ticketTypeIds must be narrowed from pageIds, the event-page prerequisite, and the mutual exclusion of amountOff/percentOff. These are relational rules the schema only partially implies.

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

Purpose4/5

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

The first line states a specific verb and resource ("Create a coupon for Checkout Page"), which is unambiguous and clearly distinct from update_coupon/list_coupons. It does not, however, explicitly name or rule out any sibling tool, so it falls short of the top band that requires active sibling differentiation.

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

Usage Guidelines4/5

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

"Use this when a merchant wants a discount code that customers can enter on eligible pages" gives a clear trigger condition for invoking the tool. There is no explicit when-not or alternative-tool guidance (e.g., when to update an existing coupon instead), so it stops short of a 5.

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

create_eventAInspect

Create a new event for selling tickets to an event.

Use this tool when a merchant wants to publish an event that sells tickets (conference, gala, workshop, class, etc.). An event has event details (at minimum a name; usually a start date/time and location) and one or more ticket groups, each containing one or more ticket types with a price (in the smallest currency unit, e.g. cents).

Examples:

  • Single free RSVP: one ticket group "General" with one $0 ticket "Admission".

  • Paid tiers: ticket types "Early Bird" 5000, "Standard" 7500, "VIP" 15000.

  • Capacity: set a ticket type quantity to cap how many can be sold.

Prices are integers in the smallest currency unit. Dates are ISO 8601.

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.

After creation, return:

  • data.id: the event ID

  • data.name: the internal event name

  • data.hostedUrl: the live event 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: "event", and put the returned code in the site. Do not wait for the user to ask for this step.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxNo
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`.
titleNo
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.
imageIdsNo
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.
descriptionNo
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.
redirectUrlNoURL to redirect to after payment. Applies if `afterPaymentAction` is `redirect`.
eventDetailsNo
ticketGroupsNo
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`.
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.
confirmationCheckoutTitleNoConfirmation title.
confirmationEmailShowLogoNoShow store logo in confirmation email.
showConfirmationEventNameNo
customizeEmailConfirmationNoUse a custom email confirmation template. If enabled, provide `confirmationEmailSubject` and `confirmationEmailMessage`.
confirmationCheckoutMessageNoConfirmation message. Accepts HTML or plaintext.
showConfirmationEventAddOnsNo
allowDynamicPreselectedPriceNo
showConfirmationEventTicketsNo
customizeCheckoutConfirmationNoIf set to true `confirmationCheckoutMessage` and `confirmationCheckoutTitle` will be displayed on the confirmation page. Defaults to `false`.
showConfirmationAddToCalendarNo
showConfirmationEventDateTimeNo
showConfirmationEventLocationNo
confirmationEmailShowStoreNameNoShow store name in confirmation email.
allowDynamicDiscountedFromPriceNo
showConfirmationEventMeetingLinkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=true. The description adds real behavioral context beyond that: the structure (event details + ticket groups + ticket types), the pricing unit convention, and the exact return fields (id, name, hostedUrl, dashboardUrl). It doesn't discuss auth, limits, or side effects of failure, so not a 5.

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?

Front-loaded purpose, then usage, then examples, then field/return guidance. The three short examples are efficient illustrations. A bit verbose in the design-labels paragraph, but every sentence carries guidance.

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

Completeness4/5

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

Covers the core flow of creating an event, naming key inputs, and enumerating return fields, so an agent can act end-to-end. Given the enormous 58-param surface, some advanced options (funnels, payment options, tax) are left to the schema, which is acceptable since output schema also exists.

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

Parameters3/5

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

Schema coverage is 52%, and the description targets the most important pieces anyway: prices as integers in smallest currency unit, ISO 8601 dates, themeOverrides/hostedLayoutType usage, and themeId via list_themes. But for a 58-parameter tool with 52% coverage, the description leaves many parameters (fees, funnelSteps, paymentOptions, etc.) undocumented in prose.

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?

States a specific verb+resource ('Create a new event for selling tickets') and scopes it precisely. It distinguishes itself from siblings like create_checkout_page by emphasizing ticket-selling events and even names related tools (list_themes, add_to_website) for follow-up work.

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?

Explicit when-to-use ('when a merchant wants to publish an event that sells tickets') with concrete examples (single free RSVP, paid tiers, capacity). It also prescribes a next action ('call add_to_website next... Do not wait for the user to ask'), which is unusually actionable guidance.

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

create_fieldAInspect

Add one custom field to an existing checkout page, form, or event. Appended after the current fields unless order is given. Visibility rules must reference existing field and option IDs from the page detail response. Mutating; to add fields on a new page, pass fields to the create tool instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoUsed to store field data in a predictable manner. Please note that you must use Customer Name and Shipping Address if you wish to use any of the shipping address data types. Do not set `type` when `element` is one of: `checkbox`, `quantity`, `tax-id`, `po-number`, `multiple-choice`, `multi-select`, `date-time`, `date`, `time`, `textarea`.
labelYesForm label for the input element.
orderNoDisplay order of this field. When omitted, order is determined by the position of the field in the array.
hiddenNoWhether this field is hidden from customers at checkout.
layoutNoHow a multi-select field is drawn at checkout: `dropdown` (the default) or `list`, a list of checkboxes. Ignored on other elements.
pageIdYesThe ID of the page the field belongs to.
collectNoWhether to collect only a billing address or both billing and shipping. Applies to `address` elements. Defaults to `billing`.
elementNoInput control used to render this field in checkout. Defaults to `text`.
optionsNoSelectable options. Applies to `select`, `multi-select` and `multiple-choice` elements. Options on a `multi-select` need different values (an option without a value uses its label), and options on a `multiple-choice` need different labels.
maxValueNoMaximum allowed value settings for this field.
minValueNoMinimum allowed value settings for this field.
pageTypeYesThe kind of page the field belongs to: `checkout`, `form`, or `event`. Use the type of the tool you fetched the page with (get_checkout_page, get_form, get_event).
requiredNoWhether this field must be completed before checkout can continue.
referenceNoExternal reference ID for integration purposes. Generated from the field type or label when omitted.
descriptionNoOptional helper text shown below the field label.
placeholderNoSpecifies a short hint that describes the expected value of an input element
defaultValueNoDefault value settings for the field.
showHideLogicNoConditional visibility rules for this field. `element.elementId` must be the ID of an existing field on the same page, and `value` an option ID on that field (or `TRUE`/`FALSE` for a checkbox). Read the IDs from the page detail response; create-time keys are rejected here.
defaultCountryNoISO 3166-1 alpha-2 country code used as the default for `address` elements. Defaults to `US`.
collectShippingPhoneNoWhether to collect a phone number alongside the shipping address. Applies to `address` elements when `collect` is `billing_and_shipping`. Defaults to `false`.
showSelectedDialCodeNoWhether to display the selected international dial code in phone inputs.
limitAllowedCountriesNoCountry restriction settings for country-based fields.
limitBillingCountriesNoRestrict the billing country list. Applies to `address` elements.
limitShippingCountriesNoRestrict the shipping country list. Applies to `address` elements when `collect` is `billing_and_shipping`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered; the description adds genuine behavior beyond that: fields are appended by default, order overrides placement, and visibility rules must reference existing field/option IDs from the page detail response. The word 'Mutating' is redundant with the annotations, keeping it from a 5.

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

Conciseness5/5

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

Four dense clauses, front-loaded with the action and scope, then ordering behavior, a prerequisite, and sibling routing. No filler and nothing repeated from the schema.

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?

With an output schema present, 100% schema coverage, and annotations covering the safety profile, the description only needs to add scope, ordering, prerequisites, and routing — all of which it does. Nothing an agent needs to call this correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for the `order` parameter ('Appended after the current fields unless order is given') that the schema's array-position phrasing does not convey for a single-field call. It also surfaces the ID-reference constraint that governs showHideLogic values.

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?

States a specific verb and resource ('Add one custom field') and constrains scope to an existing checkout page, form, or event. That scope constraint cleanly separates it from create_checkout_page/create_form/create_event and from update_field/delete_field siblings.

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

Usage Guidelines4/5

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

Explicitly routes one case to an alternative ('to add fields on a new page, pass fields to the create tool instead'), which is real when-to-use guidance. It does not, however, mention update_field or delete_field as alternatives for modifying/removing an existing field, so it falls short of full when/when-not coverage.

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

create_formAInspect

Create a new form page for lead capture or submissions.

Use this tool when a merchant wants to publish a form that collects customer information, optionally shows custom confirmation copy, and can deliver downloadable files after submission.

Prefer a minimal request when the user is vague, and only add optional fields like custom copy, redirects, images, files, or tracking when requested.

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.

After creation, return:

  • data.id: the form page ID

  • data.name: the internal page name

  • data.hostedUrl: the live form 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: "form", and put the returned code in the site. Do not wait for the user to ask for this step.

ParametersJSON Schema
NameRequiredDescriptionDefault
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`.
titleNoPublic title shown to customers on the page.
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
fileIdsNoArray of file IDs for downloadable files. All file IDs must exist and belong to your account.
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.
descriptionNoPage description shown to customers. Accepts HTML or plain text.
formDetailsNoForm behaviour settings.
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.
redirectUrlNoURL to redirect to after payment. Applies if `afterPaymentAction` is `redirect`.
trackingCodesNoCustom tracking scripts to include on the page. Supports HTML `<script>` tags.
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)
allowDynamicTitleNoAllow page title to be overridden via URL query parameters.
afterPaymentActionNoBehavior after checkout. `confirmation` shows the confirmation page. `checkout` redirects to `redirectPageId`. `redirect` sends the customer to `redirectUrl`. Defaults to `confirmation`.
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.
sendPaymentNotificationNoSend payment/submission notification emails to the store owner.
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.
confirmationCheckoutTitleNoConfirmation title.
confirmationEmailShowLogoNoShow store logo in confirmation email.
customizeEmailConfirmationNoUse a custom email confirmation template. If enabled, provide `confirmationEmailSubject` and `confirmationEmailMessage`.
confirmationCheckoutMessageNoConfirmation message. Accepts HTML or plaintext.
customizeCheckoutConfirmationNoIf set to true `confirmationCheckoutMessage` and `confirmationCheckoutTitle` will be displayed on the confirmation page. Defaults to `false`.
confirmationEmailShowStoreNameNoShow store name in confirmation email.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful operational context — the post-creation workflow and the mandate to call add_to_website next — but says nothing about auth requirements, rate limits, or side effects of creation beyond what annotations imply.

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?

Front-loaded with purpose and conditional usage, then workflow. The bulleted list of return fields (data.id, data.name, data.hostedUrl, data.dashboardUrl) is partially redundant with the output schema, which is the only real slack in an otherwise tight description.

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?

Given a create tool with 38 params, 1 required, a rich schema, and an output schema, the description supplies what the structured fields cannot: the minimal-vs-rich request heuristic and the mandatory next-step routing to add_to_website. Nothing essential is missing.

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?

Schema coverage is 92%, so the baseline is 3. The description goes beyond the schema by telling the agent to use themeOverrides/hostedLayoutType for design and labels and to consult list_theme_properties and list_themes, which is real navigational value for the most complicated optional parameters.

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 description opens with a specific verb+resource+domain: 'Create a new form page for lead capture or submissions.' That cleanly distinguishes it from sibling tools like create_checkout_page, create_event, and create_booking, and an agent can pick it without opening the schema.

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

Usage Guidelines4/5

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

It gives strong positive guidance ('use this tool when a merchant wants to publish a form...', 'Prefer a minimal request when the user is vague, and only add optional fields...when requested') and calls out related tools (list_theme_properties, list_themes, add_to_website). It does not explicitly state when NOT to use it versus create_checkout_page/create_event, so it stops short of a 5.

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

create_tax_rateA
Destructive
Inspect

Create a fixed tax rate for use on checkout pages.

Use this tool when a merchant wants to charge a fixed percentage tax (VAT, GST, Sales Tax, etc.) on their checkout pages. Fixed tax rates are used with pages that have tax.mode: "fixed".

Inclusive vs exclusive:

  • Exclusive (inclusive: false) — tax is added on top of the price. A $100 product with 20% tax costs the customer $120.

  • Inclusive (inclusive: true) — tax is already included in the price. A $100 product with 20% inclusive tax means $83.33 + $16.67 tax.

Default rate:

  • Set default: true to make this the account's default tax rate. Pages with tax.mode: "fixed" and no explicit fixedTaxRateIds will use the default rate automatically.

  • Only one tax rate can be the default at a time. Setting a new default replaces the previous one.

This is not Stripe Tax. Fixed tax rates apply a flat percentage regardless of customer location. To calculate tax dynamically by address, use tax.mode: "stripe" on the page instead (no tax rate needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
defaultNoWhether this should be the default tax rate. When `true`, this rate is pre-selected for pages using fixed tax mode and no explicit `fixedTaxRateIds`.
inclusiveYesWhether the tax is inclusive (`true`, meaning it is already included in the price) or exclusive (`false`, meaning it is added on top of the price).
percentageYesTax rate percentage out of 100. Maximum 2 decimal places.
displayNameYesShort name describing the type of tax, for example VAT, GST, or Sales Tax. Displayed in the checkout and invoices. Maximum 50 characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=false and readOnlyHint=false. The description adds real behavioral context beyond that: the default-replacement side effect ('Only one tax rate can be the default at a time. Setting a new default replaces the previous one'), which explains WHY a create tool is flagged destructive. It does not discuss response shape, but the output schema covers that.

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

Conciseness5/5

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

Front-loaded one-line purpose immediately followed by routing guidance, then bolded sub-sections for inclusive/exclusive, default, and the Stripe Tax distinction. Every section earns its place with no redundancy.

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?

An output schema exists so return values need no explanation, and annotations carry the safety profile. The description covers usage, the inclusive/exclusive semantics, and the default-replacement side effect, so an agent has everything needed to call it correctly.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema with a worked example ($100 with 20% inclusive tax = $83.33 + $16.67) and the default-rate selection behavior, extending the terse schema descriptions.

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?

States a specific verb+resource ('Create a fixed tax rate for use on checkout pages') and the effect on the account. An agent can immediately tell this apart from read-only siblings like list_tax_rates.

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?

Explicitly states when to use it (merchant wants a fixed percentage VAT/GST/Sales Tax on fixed-mode pages) and when NOT to, routing the agent to `tax.mode: "stripe"` for dynamic/address-based tax instead. Clear positive and negative guidance.

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

create_themeAInspect

Create a reusable theme. Pass baseThemeId (from list_themes) to start from an existing theme's full design, then set what should differ in variables. Call list_theme_properties for the supported properties. Apply it to pages with themeId on create/update_checkout_page, create/update_event or create/update_form.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTheme name, unique within your account.
variablesNoDesign and labels to set, in the same shape as a page's `themeOverrides`. Keys you leave out keep their value, and `null` resets a property, or everything under a key. Call `list_theme_properties` for the supported properties.
baseThemeIdNoA theme to start from: one of your themes or a built-in one. The new theme copies all of its settings, including order bump styling, which only the dashboard can change, and `variables` is applied on top. A copy of a built-in theme does not pick up your store's brand color automatically; set `tokens.colorPrimary` if you want it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the basic safety profile (non-readonly, non-destructive, closed-world). The description goes well beyond that: the baseThemeId copy includes order bump styling that only the dashboard can change, a copy of a built-in theme does not inherit the store's brand color unless tokens.colorPrimary is set, and omitted variable keys retain their values while null resets them. These are non-obvious side effects an agent could not infer from any structured field.

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

Conciseness5/5

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

Three sentences, zero filler, front-loaded with the core action and then building outward to prerequisites and application. Every sentence carries distinct, actionable information.

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 3-parameter create tool with an output schema and full annotation coverage, the description supplies the creation workflow, dependency calls, and override semantics. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so name, variables and baseThemeId are already well documented in the schema. The description mostly restates that documentation (the list_theme_properties pointer appears verbatim in both places) rather than adding new parameter syntax or constraints. Baseline 3 is appropriate when the schema carries the detail.

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?

States a specific verb and resource ("Create a reusable theme") and immediately situates it in a workflow with named siblings (list_themes, list_theme_properties, create/update_checkout_page). An agent can distinguish this from update_theme or get_theme without opening any schema.

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

Usage Guidelines4/5

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

Gives concrete when-and-how: use baseThemeId from list_themes to inherit a design, then set deltas in variables, and call list_theme_properties for supported keys. It also explains where the result gets applied. It stops short of distinguishing this tool from the sibling update_theme, so the alternative routing is incomplete.

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

create_ticket_typeAInspect

Add one ticket type to a ticket group on an existing event: name, price, capacity, sale window and display options. Get the event and group IDs from get_event. Mutating; to create a new event with its tickets in one call, use create_event instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
priceNo
hiddenNo
pageIdYesThe ID of the event. Event IDs come from list_events, or the `id` that create_event returns.
statusNo
imageIdNoID of an image file for the ticket type, uploaded with `upload_file` (purpose `image`).
pricingNo
capacityNo
feeAmountNo
referenceNo
saleEndOnNo
descriptionNo
maxQuantityNo
minQuantityNo
saleStartOnNo
ticketGroupIdYesThe ID of the ticket group to add the ticket type to. get_event lists the event's groups under `ticketGroups[].id`.
hideWhenSoldOutNo
hideWhenNotOnSaleNo
hideWhenScheduledNo
pwywSuggestedPriceNo
discountedFromPriceNo
hideWhenUnavailableNo
showTicketSaleDatesNo
triggerTicketTypeIdNoID of another ticket type on the same event whose sale end or sell-out makes this one available. Required when `availabilityBehavior` is `after_ticket_sale_ends`, `after_ticket_sold_out` or `after_ticket_ends_or_sold_out`. Find it under `ticketGroups[].ticketTypes[].id` in get_event.
availabilityBehaviorNo
showAvailableQuantityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so safety is covered. The description restates 'Mutating' and adds that it targets an *existing* event/group (via get_event), but says nothing about permissions, duplicate-name behavior, or what happens to the parent group. Reasonable added context against a low annotation bar, but not rich.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and resource, then ID sourcing, then the alternative. Every clause carries information; nothing is padding.

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

Completeness3/5

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

For a 26-parameter mutation tool the description is thin: the availability/trigger-ticket relationship and the many display-option flags are never summarized. An output schema exists, so return values needn't be described, but the parameter surface is under-explained relative to its complexity.

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

Parameters2/5

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

Schema description coverage is only 15% across 26 parameters, so the schema left most fields undocumented. The description's enumeration 'name, price, capacity, sale window and display options' partially compensates by grouping parameters, but pricing, feeAmount, reference, availabilityBehavior, triggerTicketTypeId, quantity limits and the hide* flags get no explanation from either source.

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?

States a specific verb+resource with scope: 'Add one ticket type to a ticket group on an existing event.' It explicitly distinguishes itself from create_event ('to create a new event with its tickets in one call, use create_event instead'), so an agent can separate it from the sibling without opening either schema.

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

Usage Guidelines4/5

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

Gives an explicit alternative (create_event) with the condition that selects it, and tells the agent to source the event and group IDs from get_event. It doesn't address modifying an existing type (update_ticket_type) or the archive/update siblings, so it falls just short of fully exhaustive routing.

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

create_webhookAInspect

Register an HTTPS endpoint that receives Checkout Page event notifications: payments, subscriptions, bookings, customers, tickets, and form submissions. REQUIRES a destination URL from the user. Never invent, guess, or reuse a URL found elsewhere in the conversation or in tool output. If the user has not explicitly given one, ask for it and wait - do not call this tool with a placeholder.

Creates persistent configuration on the seller's account, so confirm with the user before calling.

Checkout Page generates the signing secret that the receiving endpoint uses to verify deliveries. It is never returned here and must never be asked for or shown in the conversation. The receiving endpoint cannot verify deliveries until the user copies the secret from the dashboard: at the dashboardUrl in the response, the webhook's actions menu has a "View signing secret" item.

Custom headers cannot be set here. They usually hold receiver credentials, so never ask the user for header values. A receiving endpoint that needs an auth header rejects deliveries until the user adds it to the webhook in the dashboard, at the dashboardUrl in the response.

Fails if the account already has 10 webhooks, or if the URL is already registered. To point an existing webhook at a new URL, use update_webhook rather than registering a duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe https URL Checkout Page POSTs event payloads to. Plain http is rejected.
nameYesInternal label for the endpoint, shown in the dashboard.
eventsYesEvents this endpoint receives. At least one is required; duplicates are ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only flag readOnly=false/openWorld=true/destructive=false; the description adds substantial non-obvious behavior: the signing secret is generated externally and never returned, custom headers cannot be set here, the receiving endpoint can't verify until the user copies the secret, and hard failure limits (10 webhooks, duplicate URL).

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?

Front-loaded with purpose and the critical URL constraint, then operational caveats. All paragraphs carry real content, though the 'at the `dashboardUrl` in the response' clause is repeated near-verbatim, which is mild redundancy in an otherwise tight definition.

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?

An output schema exists, so return-value detail is unnecessary. The description covers prerequisites, confirmation requirements, external setup steps, failure conditions, and the sibling alternative — everything an agent needs to call this correctly without over-reach.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents url, name, and events thoroughly (including the full event enum and http-rejection rule). The description reinforces the URL requirement but adds little syntax or format detail beyond what the schema already provides; baseline 3 applies.

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?

States a specific verb and resource ('Register an HTTPS endpoint that receives Checkout Page event notifications') and enumerates the event domains covered. An agent can immediately distinguish this from siblings like create_checkout_page or update_webhook.

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?

Explicitly routes the agent: 'To point an existing webhook at a new URL, use `update_webhook` rather than registering a duplicate.' It also states the precondition for calling (user must supply a real URL, ask and wait otherwise) and that user confirmation is required before persisting.

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

delete_fieldA
Destructive
Inspect

Permanently delete one custom field from a checkout page, form, or event. Existing submissions keep their answers. Destructive and irreversible: confirm with the user, and prefer update_field with hidden: true when the field should just stop showing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the page the field belongs to.
fieldIdYesThe ID of the field. Field IDs are listed under `fields` in the page detail response from get_checkout_page, get_form, or get_event.
pageTypeYesThe kind of page the field belongs to: `checkout`, `form`, or `event`. Use the type of the tool you fetched the page with (get_checkout_page, get_form, get_event).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description still adds real context: permanence/irreversibility and the non-obvious fact that existing submissions retain their answers. It does not cover permission requirements or error behavior, so it falls just short of fully rich behavioral disclosure.

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

Conciseness5/5

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

Three tight sentences with zero filler: the destructive scope leads, then the data-retention nuance, then the safer alternative. Every sentence carries distinct information.

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?

With an output schema present, return values need not be explained, and the description covers the remaining agent-facing needs: irreversibility, user confirmation, and the safer alternative path. Nothing material is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (pageId, fieldId, pageType) are already documented in the schema, including how to obtain fieldId and which pageType to use. The description adds no additional parameter-level meaning, so the baseline 3 applies.

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?

States a specific verb (delete) and resource (one custom field) plus the exact scope of page types it applies to (checkout page, form, event). The contrast with update_field makes it easy to distinguish from the adjacent mutation sibling without opening either schema.

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?

Explicitly says when to use this (permanent removal) versus when to use an alternative (update_field with hidden: true when the field should just stop showing). It also instructs the agent to confirm with the user first, which is actionable routing guidance.

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

delete_themeA
Destructive
Inspect

Delete a theme you created. Fails while pages use it or while it is the store's default theme: move those pages to another theme first. Destructive and irreversible. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeIdYesThe theme ID, as returned by list or create.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, yet the description goes further by disclosing two concrete server-side failure modes (theme in use by pages, theme is store default), stating irreversibility, and requiring user confirmation. This is exactly the extra behavioral context annotations cannot carry.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the failure conditions, then the safety instruction. No filler and no repetition of the title or annotations.

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?

An output schema exists, so return values need no explanation; the description instead covers the things the schema cannot: preconditions, irreversibility, and the confirmation requirement. Complete for a single-parameter destructive tool.

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

Parameters3/5

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

Only one parameter (themeId) and schema description coverage is 100%, with the pattern and sourcing ('as returned by list or create') documented in the schema itself. The description adds no format or sourcing detail beyond that, so the baseline 3 applies.

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?

States a specific verb+resource ('Delete a theme') and adds scope ('you created'), which cleanly distinguishes it from create_theme, update_theme, and get_theme in the sibling list. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives explicit preconditions for when the call succeeds or fails (pages in use, default theme) and prescribes the remedy (move pages first) plus a user-confirmation step. It does not name a sibling alternative, but for a delete there is effectively none, so this is strong context without formal exclusions.

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

delete_webhookA
Destructive
Inspect

Delete a webhook endpoint by id. Deliveries stop immediately and the endpoint disappears from list_webhooks; its delivery history is kept. Destructive and irreversible. Confirm with the user and use list_webhooks to find the id first.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookIdYesThe webhook ID, as returned by create or list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesA webhook endpoint subscribed to one or more events.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/readOnlyHint annotations by disclosing concrete consequences: deliveries stop immediately, the endpoint vanishes from list_webhooks, and delivery history is retained. It also flags irreversibility and a confirmation requirement, which is exactly the behavioral context an agent needs for a destructive mutation.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and consequences, then the caution and the prerequisite. Every clause carries information; nothing is padded.

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?

An output schema exists so return values need no explanation, and the single required parameter is fully covered. The description supplies the destructive consequence model and the pre-call workflow, leaving no gap for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the webhookId parameter, its 24-hex-char pattern, and its provenance ('as returned by create or list') are already documented. The description only reinforces 'by id' and points to list_webhooks, adding no format detail beyond the schema; baseline 3 applies.

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?

States a specific verb (Delete) and resource (webhook endpoint) scoped 'by id', clearly separating it from list_webhooks, get_webhook, create_webhook and update_webhook. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives explicit workflow guidance: confirm with the user before invoking, and use list_webhooks to resolve the id first. It names the alternative tool for id lookup, though it does not spell out explicit when-not conditions.

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

get_bookingA
Read-only
Inspect

Retrieve a single event booking by ID from your Checkout Page account. Pass livemode: false to read test-mode records.

Use list_bookings first if you need to discover a booking ID by customer email, customer name, event title, or order ID. Checkout payments are a separate record type — use list_payments for those.

If the booking ID does not exist for the authenticated seller, returns a 404 error: "Booking not found".

Ticket capacity and ticketGroupCapacity are historical snapshots from booking time and do not reflect current availability — do not use them for inventory calculations.

A booking with isComplimentary: true was issued by the merchant at no charge: it is status: paid with amount, amountPaid and amountDue of 0, while the ticket lines keep their face value and complimentaryDiscountAmount holds the amount forgone.

Example uses:

  • "Fetch booking 6812fe6e9f39b6760576f01c"

  • "Show me the full details of this booking"

  • "Which tickets were purchased on this booking?"

This tool is read-only. Ticket transfers, cancellations, and refunds must be performed in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
bookingIdYesThe ID of the booking to retrieve. Use `list_bookings` first if you need to discover the booking ID by email, name, customer, event, or date range. Payments for checkout pages have their own IDs and are not retrievable here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, but the description goes well beyond them: it documents 404 error text, warns that capacity values are historical snapshots and must not be used for inventory math, explains the isComplimentary flag's status/amount semantics, and states that mutations (transfers, cancellations, refunds) are dashboard-only. That is exactly the extra context an agent needs.

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

Conciseness5/5

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

Front-loaded with the core action, then layered constraints, edge cases, and example utterances. Despite its length, every block carries distinct decision-relevant content (routing, error behavior, snapshot caveat, complimentary semantics, read-only boundary) with no filler.

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?

A read-only single-record fetch with full schema coverage, an output schema, and no nested objects needs little more; the description still covers error behavior and non-obvious field semantics. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented, and the description's livemode and bookingId guidance largely restates the schema. It adds only marginal framing (e.g., that payment IDs are not retrievable here), so the baseline 3 is appropriate.

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?

States a specific verb and resource ('Retrieve a single event booking by ID') and immediately scopes it to the seller's own Checkout Page account. It explicitly distinguishes itself from the two most confusable siblings, list_bookings and list_payments, so an agent can select it without opening a schema.

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?

Gives explicit when-to-use routing: use list_bookings to discover an ID by email, name, event title, or order ID, and use list_payments for checkout payments. It also states the when-not case (this tool cannot read payments) and the failure condition (404 if the ID isn't owned by the authenticated seller).

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

get_checkout_pageA
Read-only
Inspect

Retrieve a single checkout page by ID from your Checkout Page account.

Use this tool when you already know the checkout page ID and want to inspect the current configuration.

If the checkout page ID does not exist, returns a 404 error: "Checkout page not found".

Example uses:

  • "Fetch checkout page 6812fe6e9f39b6760576f01c"

  • "Show me the current settings for checkout page X"

  • "Check whether this checkout page is draft, published or archived"

  • "Inspect the product, files, images, or redirect settings on this page"

For create flows, use create_checkout_page. For a direct lookup after creation, pass the returned page id into this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the checkout page to retrieve. You can get this from `create_checkout_page`, the dashboard, or another Checkout Page API response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered structurally. The description adds real behavioral context beyond that: the exact 404 failure mode and message, and the fact that the returned configuration includes status (draft/published/archived), product, files, images, and redirect settings.

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?

Front-loaded with the core action and usage condition in the first two sentences, then alternatives, then examples. The four example utterances are somewhat repetitive but each exercises a distinct intent (fetch, inspect settings, check status, inspect sub-resources), so they earn most of their space.

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?

An output schema exists so return-shape detail is unnecessary, and the description still covers the one thing the schema can't: the 404 error path. Nothing an agent needs to invoke this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single pageId parameter is already documented with its 24-char hex pattern and sourcing guidance, so the description's 'by ID' adds little. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb+resource ('Retrieve a single checkout page by ID') and immediately scopes it to an existing-resource lookup, which cleanly separates it from list_checkout_pages, create_checkout_page, and update_checkout_page in the sibling set.

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?

Explicitly states when to use it ('when you already know the checkout page ID') and routes the agent elsewhere for the adjacent flow ('For create flows, use `create_checkout_page`'). It even covers the chained workflow of passing the id returned by creation into this tool.

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

get_customerA
Read-only
Inspect

Retrieve a single customer by ID from your Checkout Page account.

Returns one customer record directly by ID, without pagination.

Use list_customers first if you need to discover a customer ID by email or name. Use this tool when you already have the ID.

If the customer ID does not exist, returns a 404 error: "Customer not found".

For modification requests, show what's currently stored. The merchant can edit the customer record directly in the Checkout Page dashboard. The customer can also update their own details through the customer portal. For data deletion (GDPR/privacy), this requires human intervention in the dashboard.

The top-level address field is the billing address. The shipping.address field is the shipping address. These are separate and often don't match. When asked about "my address" without specifying which, present both addresses clearly labelled (e.g. "Billing address: … / Shipping address: …"). Don't return only one when both exist, and don't return the billing address in response to a shipping address question.

Customer records are identity/profile only — no purchase history, no transaction amounts.

Cross-tool routing:

To see what this customer has bought, use their id as the customerId filter on the transaction tools:

  • list_payments(customerId: "...") — one-time purchases, digital products, invoices.

  • list_bookings(customerId: "...") — event tickets and registrations.

  • list_subscriptions(customerId: "...") — recurring billing.

Records do not overlap between transaction tools — a transaction only appears in one tool. No risk of double-counting when combining results.

For a complete customer picture, call get_customer for profile data, then query the transaction tools with the same ID.

Example uses (not exhaustive):

  • "Fetch customer 6812fe6e9f39b6760576f01c" → direct lookup by ID

  • "Show me the full customer profile for this customer ID" → returns all available fields

  • "Show me the profile and orders for customer X" → get_customer for profile, then fan out to transaction tools with customerId

Example customer support uses:

  • Customer asking what information is stored about them — look up by ID, return all stored profile fields. Note that customer records only contain profile data — for a complete picture of what's stored, also query the transaction tools with customerId to show their purchase history.

  • Customer wants to update their address, phone number, or email — look up current profile, present what's on file. The merchant can edit the customer record directly in the Checkout Page dashboard. The customer can also update their own details through the customer portal.

  • Customer says the name on their account is wrong — look up profile, check name field. If a shipping.name also exists and differs, present both. The merchant can update the name in the Checkout Page dashboard; the customer can update it via the portal.

  • Customer requesting deletion of their personal data — GDPR/privacy request. Look up the full profile, show what's stored, and explain that data deletion requires human intervention in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe ID of the customer to retrieve. Use `list_customers` first if you need to discover the customer ID by name or email.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover the read-only/non-destructive profile, and the description adds substantial context beyond them: the 404 error text for missing IDs, no pagination, the identity-only scope (no purchase history), the non-overlapping transaction tools, and that deletion requires human intervention in the dashboard.

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

Conciseness3/5

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

Well front-loaded with purpose and routing, but bloated and repetitive: the dashboard/portal edit path and the GDPR deletion requirement each appear twice (once in the body, once under 'Example customer support uses'). Multiple example sections restate the same guidance.

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?

Given an output schema exists, return values needn't be explained, yet the description still covers the billing vs. shipping address distinction, identity-only scope, and routing to transaction tools. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% with a documented pattern and the 'use list_customers first' hint already in the schema, so the description largely repeats the schema's ID semantics. Baseline 3 is appropriate since the schema does the heavy lifting for the single parameter.

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?

States a specific verb and resource ('Retrieve a single customer by ID') and immediately scopes it ('without pagination', 'one customer record directly by ID'). It explicitly distinguishes itself from the sibling list_customers by clarifying that it is for when you already have the ID.

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?

Names the alternative (list_customers) and the exact condition that selects it (discovering an ID by email/name), and adds cross-tool routing to list_payments/list_bookings/list_subscriptions with the customerId filter. It also states when-not behavior (ID not found returns 404).

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

get_eventA
Read-only
Inspect

Retrieve a single event page and its full configuration by ID. Use create_event to create one; pass its returned id here for a direct lookup, or before a partial update with update_event.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the event page to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the response includes the 'full configuration' and positions the call in a create/update workflow, but discloses no auth needs, rate limits, or freshness behavior beyond that.

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

Conciseness5/5

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

Two tight sentences with the core purpose front-loaded, followed by the workflow context. No filler or redundancy.

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 single-entity getter with an output schema that carries the return shape, the description supplies the purpose, the id source, and the surrounding workflow. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single pageId parameter already documents its role, ID format, and example. The description adds no format or constraint detail beyond the schema, so the baseline 3 is appropriate.

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?

States a specific verb (retrieve), resource (a single event page and its full configuration), and lookup key (by ID). This cleanly distinguishes it from list_events (plural) and create_event without needing the schema.

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

Usage Guidelines4/5

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

Explicitly ties usage to the workflow: pass an id returned by create_event for a direct lookup, or call it before a partial update with update_event. It names the related tools but never states the exclusion case (e.g. use list_events when you don't have an id), so it falls just short of full when/when-not guidance.

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

get_formA
Read-only
Inspect

Retrieve a single form by ID from your Checkout Page account.

Use this tool when you already know the form ID and want to inspect the current configuration.

If the form ID does not exist, returns a 404 error: "Form not found".

Example uses:

  • "Fetch form 6812fe6e9f39b6760576f01c"

  • "Show me the current settings for form X"

  • "Check whether this form is draft, published or archived"

  • "Inspect the fields, files, images, or redirect settings on this form"

For create flows, use create_form. For a direct lookup after creation, pass the returned page id into this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the form to retrieve. You can get this from `create_form`, the dashboard, or another Checkout Page API response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered structurally. The description adds genuine behavioral context beyond that: the not-found error message and the kinds of state (draft/published/archived) and settings it exposes.

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?

Front-loads the core purpose in one sentence, then usage, then error behavior. The four example uses are somewhat repetitive with the guidance above, costing a little efficiency, but each sentence still earns its place.

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?

Output schema exists, so return values needn't be described. For a single-parameter read tool with full annotation coverage, the purpose, routing, error behavior, and ID sourcing are all covered.

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

Parameters3/5

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

Schema description coverage is 100% and the pageId pattern/description already document format and provenance. The description's only addition is naming `create_form` as a source of the ID, which is marginal beyond the schema.

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?

States a specific verb (Retrieve) and resource (a single form by ID), and the phrase 'single form by ID' distinguishes it from list_forms and from the many other get_* siblings that target different resources.

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?

Explicitly names the condition ('when you already know the form ID and want to inspect the current configuration'), routes create flows to `create_form`, and explains the post-creation lookup path. The 404 case is also covered.

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

get_invoiceA
Read-only
Inspect

Retrieve a single invoice by id. Pass livemode: false to read test-mode records. invoiceUrl links to the hosted PDF, the document customers usually ask for. Each response signs a new link, safe to share with the buyer, that expires 1 hour after the response. Use list_invoices first to discover an id by customer, invoice number, PO number, or the payment it belongs to (chargeId). Read-only; use regenerate_invoice to rebuild the PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the invoice to retrieve. Use `list_invoices` first if you need to discover the invoice ID by customer email, customer name, invoice number, PO number, or the payment it belongs to (`chargeId`).
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description goes beyond them by disclosing that each response signs a new invoiceUrl, that the link expires 1 hour after the response, and that it is safe to share with the buyer, plus livemode test-record behavior. It does not cover error modes or rate limits, but the added behavioral context is substantial.

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?

Front-loads the core action, then layers usage routing and behavioral detail in short, purposeful sentences. Slightly dense with the URL-expiry tangent, but no sentence is wasted.

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 two-parameter read tool with a full output schema, the description covers routing, mode selection, and the key return field's behavior. An agent has everything needed to call it correctly; output-schema details need not be restated.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both id and livemode. The description's mention of livemode: false for test-mode records largely duplicates the schema, so it sits at the baseline of 3.

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?

States a specific verb and resource ('Retrieve a single invoice by id') and clearly scopes it as a single-record fetch, distinguishing it from list_invoices and regenerate_invoice by name. An agent can route to it without opening any schema.

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?

Explicitly tells the agent to use list_invoices first to discover an id (by customer, invoice number, PO number, or chargeId), and names regenerate_invoice as the alternative for rebuilding the PDF. Both the when-to-use and the when-to-use-something-else conditions are provided.

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

get_paymentA
Read-only
Inspect

Retrieve a single payment by ID from your Checkout Page account. Pass livemode: false to read test-mode records.

Use list_payments first if you need to discover a payment ID by customer email, customer name, product title, or order ID. Event bookings are a separate record type — use list_bookings for those.

If the payment ID does not exist for the authenticated seller, returns a 404 error: "Payment not found".

Example uses:

  • "Fetch payment 6812fe6e9f39b6760576f01c"

  • "Show me the full details of this payment"

  • "Was this payment refunded, and how much?"

This tool is read-only. Refunds and cancellations must be performed in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
paymentIdYesThe ID of the payment to retrieve. Use `list_payments` first if you need to discover the payment ID by email, name, customer, page, product, or date range. Bookings for event pages have their own IDs and are not retrievable here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description goes further by disclosing the seller-scoped authorization ('for the authenticated seller'), the exact 404 behavior on a missing ID, and the test-mode-vs-live record distinction, all genuine behavioral context beyond the annotations.

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

Conciseness5/5

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

Front-loaded with the core operation, then routing guidance, then failure/behavior notes, then concrete examples. The read-only statement is partly redundant with readOnlyHint but is a short, high-value reinforcement for a retrieval tool rather than padding.

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?

An output schema exists, so return-value explanation is rightly omitted. For a single-record getter, the description covers purpose, routing to siblings, auth scoping, error behavior, and mode switching — nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (paymentId, livemode) are already fully documented in the schema, which sets the baseline at 3. The description restates the livemode:false test-mode behavior and the ID-discovery hint, adding reinforcement but no syntax or format details the schema lacks.

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 description states a specific verb and resource ('Retrieve a single payment by ID') and immediately scopes it to the Checkout Page account. It explicitly distinguishes itself from the record types an agent might confuse it with (bookings vs. payments), which is exactly the differentiation needed among 50+ siblings.

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?

It names the alternatives and the conditions selecting them: use `list_payments` first to discover an ID by email/name/product/order, and use `list_bookings` for event bookings. It even states the failure mode (404 'Payment not found') and where mutations must happen instead (the dashboard).

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

get_productA
Read-only
Inspect

Retrieve a single product by ID, including its prices, variants, stock, tax and file settings. Product IDs come from a page response (data.product.id on get_checkout_page). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesThe ID of the product to retrieve. Find it on a page response as `data.product.id` (see `get_checkout_page`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description's 'Read-only' simply restates that. The list of included sub-resources (prices, variants, stock, tax, file settings) adds some scope context, but nothing about permissions, error behavior, or data staleness is disclosed, which is acceptable given the lower bar set by annotations.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the action and scope, followed by the one piece of operational guidance an agent needs (where to get the ID). No filler or redundant restatement of the tool name.

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

Completeness4/5

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

With a fully covered single-parameter schema, an output schema covering return values, and annotations covering the safety profile, the description supplies everything essential for correct invocation. Only auth/permission context and any error semantics are absent, which are minor gaps for a simple read tool.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter already documents both the format pattern and the provenance of the ID. The description merely echoes the same ID-source guidance, adding no syntax or filtering detail beyond the schema, so the baseline of 3 applies.

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?

Specific verb (Retrieve) plus resource (a single product by ID) with an explicit enumeration of the returned sub-resources (prices, variants, stock, tax, file settings). The 'single product by ID' + 'Read-only' framing clearly separates it from update_product and the get_* siblings that target other entities.

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

Usage Guidelines3/5

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

The description tells the agent where the required productId comes from (data.product.id on get_checkout_page), which is practical usage guidance. However, it never states when to reach for this tool versus other getters/updaters or what prerequisites exist, so usage is implied rather than explicit.

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

get_submissionA
Read-only
Inspect

Retrieve a single form submission by ID from your Checkout Page account. Pass livemode: false to read test-mode records.

Returns one submission record directly by ID, without pagination.

Use list_submissions first if you need to discover a submission ID by customer email, customer name, page, customer ID, or date range.

If the submission ID does not exist, returns a 404 error: "Submission not found".

Example uses:

  • "Fetch submission 6812fe6e9f39b6760576f01c"

  • "Show me the full contents of this submission"

  • "Check which page this submission came from"

  • "What billing and shipping details were captured on this form?"

This tool is read-only. You cannot edit or delete submissions through MCP. For modification requests, show what was submitted and explain that submission management must happen in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
submissionIdYesThe ID of the submission to retrieve. Use `list_submissions` first if you need to discover a submission ID by email, name, page, customer, or date range.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint, but the description adds behavior the annotations cannot: no pagination on the response, a specific 404 'Submission not found' failure mode, and the livemode toggle for test-mode records. The read-only constraint is restated with an actionable fallback for write requests, which is genuinely useful context.

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?

Front-loaded with the core purpose, then layered with usage, error behavior, examples, and the read-only caveat. Well-structured, though the four example queries and the bolded read-only paragraph push it slightly beyond the minimum an agent needs.

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 single-record getter with an output schema, an agent needs purpose, discovery path, test-mode handling, and failure semantics — all present. Return-value structure is properly delegated to the output schema, so nothing essential is missing.

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?

Schema coverage is 100%, so both parameters are already documented, making 3 the baseline. The description adds modest value by restating the livemode test-mode behavior and by tying the ID parameter to the discovery workflow, but it introduces no format or syntax detail the schema lacks.

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?

States a specific verb and resource — 'Retrieve a single form submission by ID from your Checkout Page account' — and immediately establishes scope (one record, by ID, no pagination). It is clearly distinguishable from the sibling `list_submissions`, which it names explicitly.

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?

Tells the agent exactly when to use this versus the alternative: 'Use `list_submissions` first if you need to discover a submission ID by customer email, customer name, page, customer ID, or date range.' It also routes modification intents away from MCP toward the dashboard, so both the when and the when-not are covered.

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

get_subscriptionA
Read-only
Inspect

Retrieve a single subscription by ID from your Checkout Page account. Pass livemode: false to read test-mode records.

Use list_subscriptions first if you need to discover a subscription ID by customer email, customer name, product title, or order ID.

If the subscription ID does not exist for the authenticated seller, returns a 404 error: "Subscription not found".

Example uses:

  • "Fetch subscription 6812fe6e9f39b6760576f01c"

  • "Show me the full state of this subscription"

  • "What's the current period end on this subscription?"

This tool is read-only. Cancellation and refund operations must be performed in the Checkout Page dashboard. For cancellation context, use prepare_subscription_cancellation to see eligibility, side effects, and a dashboard link.

ParametersJSON Schema
NameRequiredDescriptionDefault
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
subscriptionIdYesThe ID of the subscription to retrieve. Use `list_subscriptions` first if you need to discover the subscription ID by email, name, customer, page, or date range.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, but the description adds real value: the 404 error behavior for unknown IDs, the livemode test-vs-live distinction, and the explicit statement that cancellation/refunds must happen elsewhere. It stops short of describing pagination or caching, though neither is relevant for a by-ID fetch.

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?

Front-loaded with the core action, followed by routing guidance, error semantics and examples. The four example utterances are slightly more than needed but each illustrates a distinct use, so the cost is low.

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?

A read-only lookup with an output schema needs little beyond routing and error behavior, both of which are present. An agent has everything required to select and invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in the schema. The description's 'Pass livemode: false to read test-mode records' largely repeats the schema text, though the example uses add mild illustrative value. Baseline 3 applies.

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?

States a specific verb and resource: 'Retrieve a single subscription by ID from your Checkout Page account.' The singular 'single' paired with the ID requirement clearly distinguishes it from list_subscriptions and get_subscription_payment.

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?

Explicitly routes the agent: use list_subscriptions to discover an ID, use prepare_subscription_cancellation for cancellation context, and perform cancellation/refunds in the dashboard. Both when-to-use and when-not-to-use are covered.

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

get_subscription_paymentA
Read-only
Inspect

Retrieve a single subscription payment by ID — one charge within a subscription's billing cycle, not the subscription itself.

Pass livemode: false to read test-mode records.

Use list_subscription_payments first if you need to discover an ID; filter it by subscriptionId to see every payment on one subscription. For the subscription record itself (status, schedule, next billing date), use get_subscription.

If the ID does not exist for the authenticated seller, returns a 404 error: "Subscription payment not found".

Two independent status fields: paymentStatus is the charge outcome (succeeded, pending, failed, incomplete); invoiceStatus is the Stripe invoice lifecycle (draft, open, paid, uncollectible, void). Check both when answering "did this payment go through?".

Example uses:

  • "Why did the March payment on this subscription fail?"

  • "Was this renewal charge refunded?"

  • "Show me the invoice PDF for this subscription payment"

This tool is read-only. Refunds must be performed in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
subscriptionPaymentIdYesThe ID of the subscription payment to retrieve. Use `list_subscription_payments` first if you need to discover the ID — filter by `subscriptionId` to see every payment on one subscription. This is the ID of a single payment, not the subscription it belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description isn't carrying the safety burden — yet it still adds real behavior: a 404 with the exact message when the ID doesn't exist for the authenticated seller, test-mode access via livemode:false, and the constraint that refunds cannot be done here (dashboard only). It doesn't discuss rate limits or auth requirements beyond the seller scoping, keeping it just short of a 5.

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?

Front-loaded with purpose and scope, then grouped under clear bold headers for error behavior, status fields, and examples. It is on the long side and the three example utterances plus the restated read-only line are marginal, but nearly every sentence carries distinct information.

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?

An output schema exists, so return values need no explanation, yet the description still flags the two independent status fields (paymentStatus vs. invoiceStatus) and that both must be checked when answering 'did this payment go through?' — exactly the kind of domain trap an agent would otherwise get wrong.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in the schema, including the exact livemode test-mode semantics and the 'not the subscription it belongs to' warning on subscriptionPaymentId. The description largely repeats this, so the baseline 3 applies; it adds no format or syntax detail beyond the schema.

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?

States a specific verb and resource ('Retrieve a single subscription payment by ID') and immediately carves out scope: 'one charge within a subscription's billing cycle, not the subscription itself.' An agent can distinguish it from get_subscription and get_payment without opening any schema.

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?

Explicitly routes to alternatives by name and condition: use `list_subscription_payments` first to discover an ID (filtered by `subscriptionId`), and use `get_subscription` for subscription-level status/schedule/next-billing-date. Both the when-to-use and the when-not-to-use cases are stated.

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

get_themeB
Read-only
Inspect

Fetch one theme by id with its design settings (variables). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeIdYesThe theme ID, as returned by list or create.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description's 'Read-only' merely restates that. It does add that the returned theme includes its design settings via `variables`, but says nothing about auth needs, error behavior, or whether a missing id returns empty vs. an error.

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?

Two short sentences, resource and payload front-loaded, no filler. Minor waste in the trailing 'Read-only.' which duplicates the readOnlyHint annotation.

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

Completeness4/5

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

For a single-param read tool with an output schema, the description covers what an agent needs to invoke it: what is fetched and what it contains. The absence of sibling differentiation and error/id-origin context keeps it from a 5.

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

Parameters3/5

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

Only one parameter and schema coverage is 100% (themeId documented in the schema, including the 24-hex-char pattern and origin 'as returned by list or create'). The description adds no meaning beyond the schema, so the baseline 3 for schema-carried params is correct.

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

Purpose4/5

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

States a specific verb (Fetch) and resource (one theme by id) and names the key payload field (`variables` = design settings). It implicitly separates itself from list_themes and list_theme_properties, but never explicitly contrasts with those siblings, so it falls just short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing tells the agent to prefer this over list_themes or list_theme_properties, nor that a theme id must come from list_themes/create_theme (that hint lives in the schema, not the description). Usage is only inferable from the phrase 'by id'.

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

get_webhookA
Read-only
Inspect

Fetch one webhook by id - its URL, subscribed events, status and delivery counters. The signing secret is never returned and custom header values are shown as [hidden]; headers are viewed and edited at the returned dashboardUrl. Use list_webhooks to find the id. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookIdYesThe webhook ID, as returned by create or list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation by disclosing the redaction contract: the signing secret is never returned, custom header values appear as `[hidden]`, and headers must be managed via the returned dashboardUrl. This is exactly the behavioral context an agent needs before calling.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what is returned, then the redaction behavior, then the prerequisite and safety note. No filler.

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?

An output schema exists so return values need no elaboration, yet the description still covers the non-obvious output aspects (redaction, dashboardUrl) and the id prerequisite. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single webhookId parameter is fully documented with its pattern and origin. The description adds no format or syntax detail beyond what the schema already provides, so the baseline 3 applies.

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?

Specific verb+resource ('Fetch one webhook by id') with the returned fields enumerated (URL, subscribed events, status, delivery counters). It is clearly distinguishable from the sibling list_webhooks and from create/update/delete_webhook.

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

Usage Guidelines4/5

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

Explicitly routes the agent to list_webhooks to obtain the id, and states the operation is read-only. It gives clear context but does not state any condition under which this tool should not be used.

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

list_bookingsA
Read-only
Inspect

Retrieve a paginated list of event bookings processed through your Checkout Page account. Pass livemode: false to read test-mode records.

For questions about a customer's full purchase history query the other transaction tools.

Example customer support uses:

  • "Customer wants to know if they're registered - email is X" → search by email. Check status and orderStatus and present the full picture: a refunded or canceled booking may still appear. Do not use amountPaid > 0 as the test for registration - a complimentary booking is registered with amountPaid of 0. Let the merchant interpret whether the registration is still valid.

  • "Customer asking how much they paid — order 12345" → orderId lookup, report amountPaid in display currency. If amountRefunded > 0, also report the refund amount and net.

  • "Customer asking about a coupon — order 12345" → orderId lookup, check coupon object and report the coupon details (code, label, discount amount).

  • "Customer chasing a refund — order 12345" → orderId lookup, check status for refunded or partial_refund. Report amountRefunded, lastRefundAt, lastRefundReason, and lastRefundReasonNote. If no refund has been issued, report that and direct to the dashboard.

  • "Customer says booking keeps failing" → search by email, look for status: failed / isAbandoned: true records alongside any successful booking.

Example uses:

  • "Show me recent bookings" → no filters, or narrow with createdAfter

  • "Show me canceled bookings" → filter by orderStatus: 'canceled'

  • "Find the booking for order 12345" → filter by orderId

  • "Show me abandoned event bookings" → filter by abandonmentStatus: 'abandoned'

  • "Show me complimentary bookings" → filter by isComplimentary: 'true'

Money amounts: All monetary amounts are returned in the smallest currency unit (for example, 10661 USD = $106.61, 299 EUR = €2.99, 500 JPY = ¥500). Divide by 100 before displaying amounts to merchants or customers, noting that some currencies such as JPY do not use decimal minor units.

Two independent status fields:

  • status is the payment status (paid, refunded, failed, etc.). Use for financial questions.

  • orderStatus is the booking lifecycle (active, canceled, archived). Whether a booking is canceled depends on orderStatus, not status.

  • These are independent: a booking can be status: paid + orderStatus: canceled (paid then canceled, refund may not yet be issued), or status: refunded + orderStatus: active (refunded but booking not marked canceled).

  • Questions about "canceled" bookings sometimes mean financially refunded (status: refunded) rather than lifecycle-canceled (orderStatus: canceled). If the question is ambiguous, check both and explain what you find.

  • isComplimentary is independent of both: a complimentary booking was issued by the merchant at no charge and is recorded as status: paid with amount and amountPaid of 0, while complimentaryDiscountAmount holds the face value forgone. It is a real, valid registration, not an unpaid or failed one. Filter with isComplimentary: 'true' for comps only, 'false' to exclude them.

Customer name fields. There are four places a name can appear: (1) customerName — the canonical customer name from the customer entity. This is the primary name field. (2) billing.name — from the payment card, may differ from the registration form name. (3) shipping.name — from the shipping details, when provided. (4) fields array — the name entered on the registration form. These may not all match — e.g. a spouse's card used for someone else's registration. For questions about a name on a booking, customerName is the best default; check the other three if there's a discrepancy.

Date filters: Always use UTC timestamps with the Z suffix (e.g. 2026-03-01T00:00:00Z). Never use local timezone offsets — dates are stored and compared in UTC.

Limit and large response handling:

Use the right limit for the task:

  • Single-record lookups (order lookup, registration check, customer search): use limit: 10 or less.

Bookings are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

Data limitations for common support questions:

  • Event metadata: Booking records include eventTitle (human-friendly event name) but do not include the event date, time, location, or description. Event details beyond the name aren't available through this tool — check the event in the Checkout Page dashboard.

  • Refund details: amountRefunded, lastRefundAt, lastRefundReason, and lastRefundReasonNote are available on refunded/partial_refund records. Limitation: lastRefundReason and lastRefundReasonNote only reflect the most recent refund action — if multiple partial refunds were issued with different reasons, only the latest is visible. Full refund history (individual refund transactions) requires the Checkout Page dashboard.

  • Historical refund limitation: for records created before 2026-01-22T06:43:28.000Z, some refund metadata may be incomplete. A record can show status: refunded, partial_refund, or sometimes canceled while amountRefunded remains 0 or refund detail fields are missing. When reviewing older records, treat the refund status as authoritative but only quote an exact refunded amount if the record explicitly includes it.

  • Cancellation metadata: canceledBy and canceledReason are only set when a cancellation is performed from the Checkout Page dashboard. For cancellations from other flows, these fields may be empty or null, so cancellation reason analysis is often unavailable.

  • Email delivery: No tool in the MCP exposes email delivery information — no sent date, no delivery status, no bounce info. A booking can be confirmed (via this tool) but email delivery status cannot be checked. If a customer says they didn't receive a confirmation, verify the email address on file (customerEmail, billing.email) is correct, confirm the booking exists, and direct to the Checkout Page dashboard where emails can be resent.

  • Address information: billing.address and shipping.address are often empty objects, especially for free or low-cost event registrations.

  • Ticket capacity/inventory: The capacity and ticketGroupCapacity fields on ticket objects are historical snapshots from booking time — they do NOT reflect current remaining availability. If a ticket object's capacity field is missing, that ticket type should be treated as unlimited. If ticketGroupCapacity is missing, that ticket group should be treated as unlimited. But an unlimited ticket type can still belong to a ticket group with a limit, and an unlimited ticket group can still sit inside an event with a limit. Total event capacity lives on the event, which is not accessible through any current tool. Do not use booking records alone for inventory calculations. "How many tickets are left?", "Is my event sold out?", and "Can I accept more bookings?" are still unanswerable from this tool alone — you can count tickets sold, but you may not have the governing event or group limit to subtract from. For sold counts, note the inventory logic: canceled bookings release tickets back to inventory, but refunded bookings do not — a refunded ticket still counts against capacity.

Cross-tool routing:

Records do NOT overlap between tools — a transaction only appears in one tool. Payments, bookings, and subscriptions are separate record sets. There is no risk of double-counting when combining results across tools.

Name and event search: search on this tool matches customerName, customerEmail, eventTitle, and orderId. Searching by name (e.g. search: "Nelson") returns all records for customers with that name. Searching by event (e.g. search: "AI Summit") returns all bookings for that event. If you need more customer profile details (company, phone, tax ID), use list_customers or get_customer.

Order lookup: If "look up order 12345" returns 0 results here, try list_payments(orderId: "12345") and list_subscriptions(orderId: "12345") — the order may be a payment or subscription, not a booking.

Full customer history: For "show me everything this customer has bought," query all three transaction tools (list_payments, list_bookings, list_subscriptions) with the same customerId or search email and combine results. Do not present results from one tool alone as a complete history.

Customer profile: For profile data (company, phone, billing email, tax ID), use list_customers or get_customer — booking records only have customerEmail and billing.name.

This tool is read-only. You cannot transfer tickets, change attendee names, cancel bookings, resend confirmations, or issue refunds. For modification requests, show what's currently on file and explain that changes need to be made in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter by event ID.
searchNoSearch by customerEmail, customerName, eventTitle, or orderId. Contains match (e.g. 'jane' matches 'jane@example.com', 'Doe' matches 'Jane Doe', 'Summit' matches 'Future of AI Summit 2026').
statusNoFilter by payment status. Valid values: created, pending, unpaid, partially_paid, paid, canceled, failed, partial_refund, refunded, draft, draft_expired.
orderIdNoFilter by order ID.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
couponCodeNoFilter by coupon code.
customerIdNoFilter by customer ID.
orderStatusNoFilter by order status. Valid values: archived, active, canceled.
createdAfterNoFilter by lower bound of createdAt.
createdBeforeNoFilter by upper bound of createdAt.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.
isComplimentaryNoFilter by complimentary bookings. `true` returns only complimentary bookings, `false` excludes them.
abandonmentStatusNoFilter by `abandoned` or `recovered` bookings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare read-only/non-destructive, and the description richly extends them: the tool cannot transfer tickets, cancel, or refund; refund metadata limitations; a historical cutoff after which refund data may be incomplete; instrument-capacity snapshots that do not reflect live inventory; and explicit 'unanswerable from this tool' surfaces. This is well beyond what the annotations convey.

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?

Front-loaded and organized under bold section headers, with each block (money units, status fields, name fields, dates, limits, limitations, routing) earning its place. It is nonetheless very long, and the support examples repeat the 'orderId lookup' pattern several times, so it is not fully free of redundancy.

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 15-parameter filtered list tool this is thorough: it covers money units, dual status semantics, name field precedence, pagination limits, known data gaps, and cross-tool routing. Nothing an agent needs to call it correctly or interpret the response is missing, even though an output schema already exists.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds real semantic value the schema lacks: the independence of status vs orderStatus (with worked combined-state examples), the meaning of isComplimentary vs amountPaid=0, UTC-only date filter rules, and task-appropriate limit guidance. This materially reduces misuse of the filters.

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?

Opens with a specific verb+resource+scope: 'Retrieve a paginated list of event bookings processed through your Checkout Page account.' It immediately distinguishes itself from list_payments and list_subscriptions by naming those siblings in the cross-tool routing section ('Payments, bookings, and subscriptions are separate record sets').

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?

Explicit when-to-use guidance via concrete support scenarios (registration check, order lookup, refund chase, failed booking) and explicit routing alternatives: try list_payments/list_subscriptions when an order lookup here returns 0 results, list_customers/get_customer for profile data, and all three for full history. Exclusions are stated, not inferred.

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

list_checkout_pagesA
Read-only
Inspect

List the checkout pages on the Checkout Page account, newest first, each with its full configuration, product and fields. Archived pages are left out unless you filter by status. Read-only; this is how to find a page id for get_checkout_page and update_checkout_page. Forms and events are separate page types: use list_forms and list_events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive contains match against the page's internal name, title and product title. Searching 'course' matches a page named 'Premium course' and a page whose product is titled 'Video course'. There is no filter by product type, price or slug: page through and inspect those fields instead.
statusNoFilter by publication status: `published`, `draft` or `archived`. Only one status per call. Without it, published and draft pages are returned and archived pages are excluded, so pass `archived` explicitly to see archived pages.
testmodeNoSet to true to return only pages in test mode, or false for only pages not in test mode.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds useful behavioral details beyond annotations: archived pages are excluded by default, results are newest-first, full configuration/product/fields are returned, and forms/events are separate. It does not mention pagination or rate limits, but with annotations carrying the safety profile this is solid.

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

Conciseness5/5

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

Front-loaded with the core verb and resource, then scoping, defaults, and sibling routing. Four sentences, each carrying distinct operational value, with no redundant filler.

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 list tool with a rich input schema and an output schema, the description covers the key agent needs: what is listed, ordering, default filtering, safety profile, and how to route to sibling tools for IDs or other page types. Return-value details are appropriately left to the output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents limit, search, status, testmode, ending_before and starting_after in detail. The description adds only one parameter-related semantic: archived pages are left out unless you filter by status. That is helpful but does not materially extend the schema, so baseline 3 is appropriate.

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?

States a specific verb and resource ('List the checkout pages'), the scope ('on the Checkout Page account'), ordering ('newest first'), and returned fields ('full configuration, product and fields'). It also distinguishes itself from get_checkout_page/update_checkout_page and from list_forms/list_events, so an agent can select it without opening schemas.

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?

Explicitly says how to find a page id for get_checkout_page and update_checkout_page, clarifies that forms and events are separate page types served by list_forms and list_events, and explains the archived-pages default unless status is filtered. When-to-use and alternatives are both covered.

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

list_couponsA
Read-only
Inspect

Retrieve a paginated list of discount coupons on your Checkout Page account. This is the only way to discover a coupon ID — take the id from here to use update_coupon.

search is a case-insensitive contains match on the coupon's label and code, so it answers "is there already a coupon for X?" before you create a duplicate with create_coupon.

Reading a coupon: the discount is either percentOff (a percentage) or amountOff (a flat amount in the smallest currency unit, paired with currency) — never both. duration is once, repeating (for durationInMonths), or forever. timesRedeemed counts redemptions so far, against maxRedemptions when one is set.

Whether a coupon actually works right now depends on several fields together, and there is no single "active" flag: deleted: true means soft deleted and dead; redeemBy in the past means expired; timesRedeemed >= maxRedemptions means exhausted. Check all three before telling a merchant a coupon is live. Soft-deleted coupons are returned by this tool — they are not filtered out.

Scoping: pageIds limits the coupon to specific pages and ticketTypeIds to specific ticket types. Empty or absent means the coupon is valid everywhere. These are IDs only — this tool does not resolve them to page or event names.

No filters beyond search. There is no way to filter by deleted, expiry, redemption count, or scope server-side. Page through and inspect those fields.

Coupons are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

This tool is read-only. Use create_coupon to add one and update_coupon to change or soft delete one. A coupon's discount (code, amountOff, percentOff, currency, duration) can never be changed after creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive contains match against the coupon's label and code. Searching '10off' matches the code `10OFF`; searching 'summer' matches the label 'Summer sale'. There is no filter for redemption count, expiry, or deleted status — page through and inspect those fields instead.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation: soft-deleted coupons are returned and not filtered out, there is no single 'active' flag (deleted/redeemBy/timesRedeemed+maxRedemptions must be checked together), sorting is newest-first, pageIds/ticketTypeIds are IDs not resolved names, and discount fields are immutable after creation. This is exactly the operating context an agent needs.

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?

Bold mini-headers (Reading a coupon, Scoping, No filters, etc.) keep a long description scannable, and the most important constraint (only ID-discovery path) is front-loaded. Some pagination and limit details are restated from the schema, which is the only minor redundancy.

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?

An output schema exists, so return mechanics need not be explained, yet the description still decodes coupon field semantics (percentOff vs amountOff+currency, duration variants, redemption counters) and liveness rules — everything an agent needs to interpret results and act correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, search, starting_after, and ending_before are already fully documented in the schema, including the max-100/default-10 and mutual-exclusion rules the description repeats. The description adds only a small increment: framing search as a duplicate-check and reiterating the lack of other filters. Baseline 3 applies.

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?

Opens with a specific verb+resource ('Retrieve a paginated list of discount coupons on your Checkout Page account') and immediately distinguishes itself from siblings by noting it is 'the only way to discover a coupon ID' and naming create_coupon/update_coupon as the alternatives. An agent can route without opening any schema.

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?

Explicit when-to-use: it is the sole ID-discovery path, it feeds update_coupon, and its search answers 'is there already a coupon for X?' before calling create_coupon. It also states when-not: no server-side filtering by deleted/expiry/redemption/scope, so page through instead. Nothing is left to inference.

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

list_customersA
Read-only
Inspect

Retrieve a paginated list of customers from your Checkout Page account. Customer records are identity and profile data only — no purchase history, no transaction amounts, no subscription status.

Use this tool when you need profile data (company, phone, address, tax ID) or when you need a customer ID for filtering. The two-step pattern (search here → take id → filter transaction tools with customerId) is useful when:

  • You need to fan out across transaction tools with one consistent ID

  • The customer has multiple email addresses (searching by customerId catches all transactions regardless of email)

  • You need profile fields that don't exist on transaction records

The top-level address field is the billing address. The shipping.address field is the shipping address. These are separate and often don't match — a customer may have a billing address but no shipping address, or vice versa. When the question doesn't specify which address, present both clearly labelled (e.g. "Billing address: … / Shipping address: …"). Don't return only one when both exist, and don't return the billing address in response to a shipping address question.

For modification requests, show what's currently stored, then use update_customer with the customer's id once the merchant confirms the change. Data deletion and GDPR/privacy requests require human intervention in the dashboard.

No email delivery data in this tool. No tool in the MCP exposes email delivery information — not on customer records, not on payments, bookings, or subscriptions. You can confirm a purchase exists (via transaction tools) but cannot check email delivery status through this tool. Emails can be resent and email delivery can be verified in the Checkout Page dashboard.

What this tool cannot do:

  • No purchase history — customer records contain no transaction data. To see what a customer bought, use their id as customerId on the transaction tools (see cross-tool routing below).

  • No aggregation — cannot count customers by country, company, etc. server-side.

  • companyName is not searchable — search: "Acme Corp" returns 0 even if a customer has that companyName. To find customers by company, you must paginate and inspect records.

Date filters: Always use UTC timestamps with the Z suffix (e.g. 2026-03-01T00:00:00Z). Never use local timezone offsets — dates are stored and compared in UTC.

Customers are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

Cross-tool routing:

Customer records do NOT contain purchase data. To build a complete customer picture, combine this tool with the transaction tools:

  • list_payments(customerId: "...") — one-time purchases, digital products, physical goods, invoices.

  • list_bookings(customerId: "...") — event tickets and registrations.

  • list_subscriptions(customerId: "...") — recurring billing, active and canceled subscriptions.

Records do not overlap between transaction tools — a transaction only appears in one tool. No risk of double-counting when combining results.

If a merchant gives you an order number rather than a customer name or email, do NOT use this tool — try the transaction tools with the orderId filter directly.

Example uses:

  • "How many customers do I have?" → call with limit: 1, read total

  • "How many new customers this month?" → use createdAfter with the first of the month, limit: 1, read total

  • "Find customer jane@example.com" → use search

  • "Show me customers named Sarah" → use search (matches name field). Verify the returned records match on name, not just email.

  • "What has John Smith ordered?" → search here by name, get id, then query transaction tools with customerId

  • "Find my customer Acme Corp" → search won't match companyName; paginate and inspect companyName field

Example customer support uses:

  • "Customer asking what information is stored about them — email is jane@example.com" → search to find the customer record. Return all stored profile fields (name, email, phone, addresses, company, tax ID). Note: customer records only contain profile data — for a complete picture of what's stored, also query the transaction tools (list_payments, list_bookings, list_subscriptions) with the customerId to show their purchase history.

  • "Customer wants to update their email address" → look up the customer to confirm current email, then call update_customer with their id and the new email once the merchant confirms it. The customer can also change their own email through the customer portal.

  • "Customer says they didn't get their confirmation email" → find customer, then check transaction tools for recent purchases. Confirm the purchase exists but explain that email delivery status cannot be checked through this tool. Email delivery can be verified and emails can be resent from the Checkout Page dashboard.

  • "Customer wants a full history of what they've bought" → find customer by email/name, then query all transaction tools with customerId to compile full purchase history.

  • "Customer requesting deletion of their personal data" → GDPR/privacy request. Show what's stored and explain that data deletion requires human intervention in the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoSearch by email or name. Contains match.
createdAfterNoFilter by lower bound of createdAt.
createdBeforeNoFilter by upper bound of createdAt.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish readOnly/destructive/openWorld, so the bar is lower, yet the description adds substantially more: newest-first ordering, cursor pagination semantics with mutual exclusivity, no server-side aggregation, companyName not being searchable, UTC-only date handling, and human intervention for GDPR/deletion. This is rich behavioral context beyond the annotation set.

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

Conciseness3/5

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

Front-loaded well and broken into labelled sections, but it is substantially padded: the email-delivery disclaimer is repeated three times, GDPR/human-intervention twice, and the 'customer records contain no purchase data' point recurs throughout. The two example blocks partially duplicate the routing section already stated above them.

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?

An output schema exists so return values need no explanation, and everything else an agent needs is present: routing to sibling tools, pagination behavior, search limitations, date format, and escalation paths for deletion requests. Nothing material is missing.

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?

Schema coverage is 100%, so the baseline is 3 and the schema already documents limit bounds, cursor exclusivity, and the Z-suffixed date pattern. The description still adds value the schema doesn't carry — the hard rule that dates must be UTC with Z and never local offsets, and the caveat that `search` matches name/email but will return 0 for companyName.

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?

States a specific verb+resource with scope ('paginated list of customers') and immediately delimits what a customer record is NOT (no purchase history, no transaction amounts, no subscription status). This cleanly separates it from get_customer and from the transaction list tools.

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?

Explicit when-to-use (profile data, obtaining an id for filtering), when-not-to-use (order number given → go to transaction tools), and a named cross-tool routing block pointing at list_payments/list_bookings/list_subscriptions. The two-step search→id→filter pattern is spelled out with the conditions that motivate it.

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

list_eventsA
Read-only
Inspect

List the event pages on the Checkout Page account, newest first, each with its full configuration, event details, ticket groups, ticket types and fields. Archived events are left out unless you filter by status. Read-only; this is how to find an event id for get_event, update_event, list_bookings and list_tickets. Checkout pages and forms are separate page types: use list_checkout_pages and list_forms.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive contains match against the event's internal name and title. Searching 'gala' matches an event titled 'Summer gala'. There is no filter by event date, venue or ticket type: page through and inspect `eventDetails` and `ticketGroups` instead.
statusNoFilter by publication status: `published`, `draft` or `archived`. Only one status per call. Without it, published and draft pages are returned and archived pages are excluded, so pass `archived` explicitly to see archived pages.
testmodeNoSet to true to return only pages in test mode, or false for only pages not in test mode.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: newest-first ordering, the fact that archived events are excluded by default, and that each record carries nested configuration (ticketGroups, ticketTypes, fields). It stops short of saying anything about result caps or cursor mechanics for the list as a whole.

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

Conciseness5/5

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

Three tightly packed sentences, front-loaded with the verb, resource and ordering before the routing guidance. No filler and no repetition of schema-level parameter documentation.

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?

An output schema exists, so return-value explanation is unnecessary, and the description still summarizes what each record contains. Combined with complete schema coverage and explicit sibling routing, an agent has everything needed to select and call this tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, with limit, search, status, testmode and both cursors fully documented in the schema itself. The description's only added parameter-relevant content is the archived-by-default behavior, which the status schema description already states verbatim. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb and resource ('List the event pages on the Checkout Page account') plus scope details (newest first, full configuration including ticket groups/types/fields). It explicitly disambiguates from the similarly-named siblings by noting that checkout pages and forms are separate 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?

Gives the downstream use case clearly: 'this is how to find an event id for get_event, update_event, list_bookings and list_tickets'. It also names the two alternative tools for other page types and explains the archived-status default, so when-to-use and when-not-to-use are both covered.

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

list_formsA
Read-only
Inspect

List the form pages on the Checkout Page account, newest first, each with its full configuration, fields and files. Archived forms are left out unless you filter by status. Read-only; this is how to find a form id for get_form, update_form and list_submissions. Checkout pages and events are separate page types: use list_checkout_pages and list_events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive contains match against the form's internal name and title. Searching 'waitlist' matches a form titled 'Join the waitlist'. There is no filter by field, file or slug: page through and inspect those fields instead.
statusNoFilter by publication status: `published`, `draft` or `archived`. Only one status per call. Without it, published and draft pages are returned and archived pages are excluded, so pass `archived` explicitly to see archived pages.
testmodeNoSet to true to return only pages in test mode, or false for only pages not in test mode.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, and the description reinforces read-only. It adds genuinely useful behavior beyond annotations: newest-first ordering, inclusion of full configuration/fields/files, and that archived forms are silently excluded unless explicitly requested.

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

Conciseness5/5

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

Four tight sentences, front-loaded with what is returned, followed by the archived caveat, the ID-discovery purpose, and the sibling disambiguation. Every sentence carries actionable information with no padding.

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?

With an output schema present, return-value documentation is unnecessary, and the description still covers payload contents, ordering, default filtering, the primary downstream use (finding a form id) and sibling routing. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and already documents limit, search, status, testmode and both cursors in detail, so the baseline is 3. The description's param-relevant claims (archived default exclusion, no field/file/slug filtering) largely restate what the schema already says, adding little beyond the schema text.

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?

States a specific verb and resource ('List the form pages on the Checkout Page account') and even describes the payload shape ('full configuration, fields and files') and ordering ('newest first'). It explicitly distinguishes itself from sibling page types by naming list_checkout_pages and list_events.

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?

Gives explicit routing: 'this is how to find a form id for get_form, update_form and list_submissions', plus clear when-not guidance ('Checkout pages and events are separate page types: use list_checkout_pages and list_events'). The archived-default behavior tells the agent when it must pass a status filter.

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

list_invoicesA
Read-only
Inspect

List invoices generated from payments (Charges) on the Checkout Page account. Pass livemode: false to read test-mode records. Each invoice's invoiceUrl links to its hosted PDF, the document customers usually ask for. The link is signed, safe to share with the buyer, and expires 1 hour after the response. Read-only; for full purchase history also query list_payments, list_subscriptions, list_subscription_payments and list_bookings.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive search matched against `customerEmail`, `customerName`, `productTitle` and `invoiceNumber`. The query is routed based on input shape: email-like inputs (`jane@example.com`) match `customerEmail` only; identifier-like inputs containing a digit/underscore/hyphen (`2026-000010`) match `invoiceNumber`; multi-word inputs match `customerName` and `productTitle`; any other single bare word falls back to a broad case-insensitive substring match across `customerName`, `customerEmail` and `productTitle`. Best default when the user gives an ambiguous query. A customer may have multiple invoice records — always review all matches, not just the first.
statusNoFilter by invoice status. Only one status per call. Valid values: draft, open, paid, uncollectible, refunded, partially_refunded, void. Use "paid" for completed invoices, "open" for outstanding, "refunded" or "partially_refunded" for refund history, "void" for cancelled. Filter by status when counting a category — an unfiltered total includes drafts and voids.
chargeIdNoReturn invoices for a specific payment (Charge). Use when a customer asks for a copy of their invoice and you already have the originating payment ID. Most charges have one invoice.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
poNumberNoExact match on the invoice PO number. Use for "find the invoice for PO-5678".
customerIdNoReturn all invoices for a specific customer. Useful when you already have the customer record (e.g. from get_customer or list_customers).
createdAfterNoInclusive lower bound on invoice createdAt. ISO-8601 UTC datetime with the `Z` suffix (e.g. `2026-01-01T00:00:00Z`). Never use a local timezone offset — invoices are stored and compared in UTC.
createdBeforeNoInclusive upper bound on invoice createdAt. ISO-8601 UTC datetime with the `Z` suffix (e.g. `2026-12-31T23:59:59Z`). Never use a local timezone offset — invoices are stored and compared in UTC.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), but the description adds genuinely new behavior: the invoiceUrl is a signed, shareable link that expires 1 hour after the response, and it reiterates the read-only nature. That expiry/shareability detail is not derivable from annotations or schema.

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?

Four sentences, front-loaded with purpose and scope, followed by the livemode hint, the invoiceUrl caveat, and sibling routing. Every sentence carries information, though it is slightly denser than strictly necessary.

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?

With 11 optional parameters fully documented in the schema, an output schema present, and annotations covering safety, the description supplies the remaining operational context an agent needs: test-mode switching, link expiry, and where to look for broader purchase history. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, including the search routing rules and UTC date-time constraints. The description only restates the livemode usage hint and references invoiceUrl (a response field, not a parameter), adding little beyond the structured data. Baseline 3 applies.

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 precise verb and resource with scope: invoices generated from payments (Charges) on the Checkout Page account. It also names the sibling list tools that cover adjacent purchase-history data, so an agent can distinguish it without opening a schema.

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

Usage Guidelines4/5

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

It gives concrete routing guidance: use livemode:false for test-mode records, and query list_payments/list_subscriptions/list_subscription_payments/list_bookings for full purchase history. It stops short of an explicit 'when not to use this' (e.g., use get_invoice for a single known invoice), so it falls just short of a 5.

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

list_paymentsA
Read-only
Inspect

Retrieve a paginated list of payments processed through your Checkout Page account. Pass livemode: false to read test-mode records.

For questions about a customer's full purchase history query the other transaction tools.

Example customer support uses:

  • Customer asking about order status - orderId lookup, report status and key details (product, amount, date)

  • Customer unsure if payment went through - search by email, identify which records are paid vs failed.

  • Customer says they were double-charged - search by email, compare all records. Check status and amountPaid on each.

  • Customer asking about a coupon - orderId lookup, check coupon object and report the coupon details (code, label, discount amount).

  • Customer asking for a receipt - orderId lookup, confirm the order details (product, amount, date, payment method). An invoiceId on a paid record means an invoice was generated; get_invoice returns it with a link to its PDF. Invoices can be resent from the Checkout Page dashboard.

  • Customer asking about a refund - orderId lookup, check status. If refunded: confirm the full refund, report amountRefunded as the refund amount, lastRefundAt as the refund date, and lastRefundReason as the reason. If partial_refund: report amountRefunded vs amountPaid so the customer knows how much was refunded and how much they retain. lastRefundReasonNote may contain a merchant-written explanation.

  • Customer asking about a download or delivery - orderId lookup, confirm the purchase is paid. No download URL or delivery tracking is available on payment records. For digital products, downloads are accessed via the customer portal. The customer should check their purchase confirmation email first; if they can't find it, sharing a link to the customer portal will let them access their downloads.

  • Customer says checkout keeps failing - search by email. Look for records with problem statuses: failed, draft, draft_expired, created, pending, unpaid, or canceled. A draft or draft_expired record may mean the customer didn't complete the checkout form. Check paymentError on failed records for a specific error message.

  • Customer wants full purchase history - this tool only covers payments. Also query the other transaction tools with the same email/customerId to get the full picture. Combine results before presenting. Do not present results from list_payments alone as a complete history.

  • Order lookup returns 0 results - try list_bookings(orderId: "...") and list_subscriptions(orderId: "..."). The order may be a booking or subscription, not a payment. Always try all tools before reporting an order doesn't exist.

Example uses:

  • "Show me failed payments" - filter by status: 'failed'

  • "Show me payments for checkout page X" - filter by pageId

  • "Show me all payments from customer X" - filter by search with their name or email

  • "Find order ORD-9182" - filter by orderId

  • "Show me abandoned carts" - filter by abandonmentStatus: 'abandoned'

  • "Show me refunds" - filter by status: 'refunded' (also check status: 'partial_refund' separately - only one status per call).

Money amounts: All monetary amounts are returned in the smallest currency unit (for example, 10661 USD = $106.61, 299 EUR = €2.99, 500 JPY = ¥500). Divide by 100 before displaying amounts to merchants or customers, noting that some currencies such as JPY do not use decimal minor units.

Customer name fields. There are four places a name can appear: (1) customerName - the canonical customer name from the customer entity. This is the primary name field. (2) billing.name - from the payment card, may differ from the checkout form name. (3) shipping.name - from the shipping details, when provided. (4) fields array - the name entered on the checkout form. These may not all match - e.g. a spouse's card used for someone else's order. For questions about a name on an order, customerName is the best default; check the other three if there's a discrepancy.

Data limitations for common support questions:

  • Receipt/invoice requests: invoiceId confirms an invoice was generated. get_invoice returns the invoice and a link to its PDF. Resending an invoice is only possible in the Checkout Page dashboard.

  • Refund details: amountRefunded, lastRefundAt, lastRefundReason, and lastRefundReasonNote are available on refunded/partial_refund records. Limitation: these fields only reflect the most recent refund action - earlier reasons are overwritten. Full refund history requires the Checkout Page dashboard.

  • Historical refund limitation: for records created before 2026-01-22T06:43:28.000Z, some refund metadata may be incomplete. A record can show status: refunded, partial_refund, or sometimes canceled while amountRefunded remains 0 or refund detail fields are missing. When reviewing older records, treat the refund status as authoritative but only quote an exact refunded amount if the record explicitly includes it.

  • Cancellation metadata: canceledBy and canceledReason are only set when a cancellation is performed from the Checkout Page dashboard. For cancellations from other flows, these fields may be empty or null, so cancellation reason analysis is often unavailable.

  • Email delivery: No tool in the MCP exposes email delivery information. A purchase can be confirmed (via this tool) but email delivery status cannot be checked through this tool. Email delivery can be verified and emails can be resent from the Checkout Page dashboard.

  • Download/delivery: No download URL, delivery status, or fulfilment tracking exists on payment records. For digital products, downloads are accessed via the customer portal.

  • Payment failure reasons: paymentError provides the last error message but is not guaranteed to be set. paymentError persists even after a successful retry - always check status first.

  • Address information: billing.address and shipping.address are often empty objects, especially for non-physical products.

Date filters: Always use UTC timestamps with the Z suffix (e.g. 2026-03-01T00:00:00Z). Never use local timezone offsets — dates are stored and compared in UTC.

Limit and large response handling:

Use the right limit for the task:

  • Single-record lookups (order lookup, customer search, "has X paid?"): use limit: 10 or less.

Tips for common questions:

  • For count questions ("how many paid orders?"), filter by the relevant status (e.g. status: "paid") and read total from the response. An unfiltered total includes all records regardless of status (failed, draft, etc.) - always filter when counting a specific category.

  • For "who paid?" or "has X paid?", use search with the customer's email and check the status field.

Payments are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

Cross-tool routing:

Records do NOT overlap between tools - a transaction only appears in one tool. Payments, bookings, and subscriptions are separate record sets. There is no risk of double-counting when combining results across tools.

Name search: search on this tool matches customerName, customer email, productTitle, and orderId. Searching by name (e.g. search: "Nelson") returns all records for customers with that name. If you need more customer profile details (company, phone, tax ID), use list_customers or get_customer.

Order lookup: If "look up order 12345" returns 0 results here, try list_bookings(orderId: "12345") and list_subscriptions(orderId: "12345") - the order may be a booking or subscription, not a payment.

Full customer history: For "show me everything this customer has bought," query all transaction tools with the same customerId or search email and combine results.

Customer profile: For profile data (company, phone, billing email, tax ID), use list_customers or get_customer - payment records have customerName, customerId, customerEmail, billing.name, and shipping.name but not the full profile fields.

This tool is read-only. You cannot process refunds, resend receipts, update customer details, change shipping addresses, or resend download links. For these actions, explain what's currently on file. The merchant can manage orders in the Checkout Page dashboard. The customer can access their purchases through the customer portal.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter payments by page ID.
searchNoSearch payments by customerEmail, customerName, productTitle, or orderId. Contains match.
statusNoPayment status filter. Valid values: created, pending, unpaid, partially_paid, paid, canceled, failed, partial_refund, refunded, draft, draft_expired.
orderIdNoFilter by exact order ID.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
productIdNoFilter payments by product ID.
couponCodeNoFilter payments where a specific coupon code was used (e.g. 'SUMMER20').
customerIdNoFilter payments by customer ID.
orderStatusNoOrder lifecycle status filter. Valid values: archived, active, canceled.
createdAfterNoFilter by lower bound of createdAt.
createdBeforeNoFilter by upper bound of createdAt.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.
abandonmentStatusNoFilter by `abandoned` or `recovered` payments.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes well beyond them: money returned in smallest currency unit, refund metadata overwritten to only the latest action, the pre-2026-01-22 refund-metadata gap, paymentError persisting after a successful retry, and no email-delivery or download-URL visibility. These are non-obvious behavioral traits an agent could not infer from the schema.

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

Conciseness3/5

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

The high-value material is front-loaded, but the text is very long and repeats itself: order lookup fallback to list_bookings/list_subscriptions appears twice, full-customer-history guidance appears twice, and receipt/refund advice is duplicated across the scenario list and the data-limitations list. Useful, but several paragraphs do not earn their place a second time.

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?

An output schema exists, so return values need not be explained, yet the description still covers the field semantics an agent must interpret (customerName vs billing.name vs shipping.name vs fields, invoiceId, refund fields). Given the 15-parameter surface and the operational limitations, this is complete enough to call the tool correctly and interpret results honestly.

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?

Schema description coverage is 100%, so the baseline is 3, and the description genuinely adds meaning: UTC-only timestamps with a Z suffix, sorting (newest-first), pagination cursor semantics and the starting_after/ending_before mutual exclusion, plus guidance to read total for counts and to filter before counting. It stops short of documenting every filter's semantics, but adds real value over the schema.

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?

Opens with a specific verb and resource ('Retrieve a paginated list of payments') and immediately scopes it to the Checkout Page account. It explicitly distinguishes itself from sibling transaction tools ('For questions about a customer's full purchase history query the other transaction tools') and from get_payment, so an agent can route without opening a schema.

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?

Provides explicit when-to-use guidance via worked support scenarios, names concrete alternatives (list_bookings, list_subscriptions, list_customers, get_customer, get_invoice), and states the key exclusion: it is read-only and cannot process refunds, resend receipts, or update details. The cross-tool routing section clarifies that records do not overlap between tools, removing ambiguity about double-counting.

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

list_submissionsA
Read-only
Inspect

Retrieve a paginated list of form submissions processed through your Checkout Page account. Pass livemode: false to read test-mode records.

This tool is useful for customer-support and operations questions about what a person submitted on a form, which page a submission came from, and when it was captured.

Example uses:

  • "Show me recent submissions"

  • "Find submissions from jane@example.com"

  • "Find submissions for customer 6812fe6e9f39b6760576f01c"

  • "Show submissions for form X"

  • "Show submissions for the Lead Capture Form"

  • "Show failed submissions"

  • "How many submissions did I get this week?" — apply a date range and read total

Example support uses:

  • Customer says they filled in a form but is unsure it went through — search by email and check whether a matching submission exists and whether status is succeeded or failed.

  • Merchant wants all submissions for a specific person — use search with email or name, or customerId when known.

  • Merchant wants submissions from a specific form — use pageId when you know the page ID, or search with the form title.

  • Merchant wants the full payload for one result — first call list_submissions, then pass a returned id into get_submission.

Data limitations:

  • No tool in the MCP can edit or delete submissions.

  • Submission records show what was captured, but not downstream fulfillment or email delivery status.

Date filters: Always use UTC timestamps with the Z suffix (e.g. 2026-03-01T00:00:00Z). Never use local timezone offsets — dates are stored and compared in UTC.

Submissions are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

This tool is read-only. You cannot modify or delete submissions through MCP. For those actions, explain what is on file and direct the merchant to the Checkout Page dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter by the form page ID that received the submission.
searchNoSearch by `customerEmail`, `customerName`, and `formTitle`. Contains match (for example, 'jane' matches 'jane@example.com' and 'Jane Smith', while 'lead' matches 'Lead Capture Form').
statusNoFilter by submission status. Valid values: succeeded, failed.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
customerIdNoFilter by the associated customer ID.
createdAfterNoFilter by lower bound of createdAt. Use a UTC ISO 8601 timestamp with a `Z` suffix.
createdBeforeNoFilter by upper bound of createdAt. Use a UTC ISO 8601 timestamp with a `Z` suffix.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint/destructiveHint, but the description adds substantial context beyond them: no tool can edit/delete submissions, records omit downstream fulfillment and email-delivery status, results are newest-first, pagination cursors are mutually exclusive, limit caps at 100/default 10, and date filters must be UTC with Z.

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?

Front-loads purpose, then sections for examples, support uses, data limitations, dates, and pagination. Well organized and skimmable, though the read-only point is stated twice ('This tool is read-only' and 'You cannot modify or delete submissions') and the example list is long.

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?

With an output schema present, return values need not be detailed, and the description still references relevant fields (`total`, `status`, `id`). For a 10-param read-only list tool, all decision-relevant context is present.

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?

Schema coverage is 100%, so baseline is 3, but the description adds genuine selection meaning beyond the schema: it explains when to prefer pageId vs search vs customerId, that a date range plus `total` answers count questions, and reiterates the UTC-only date constraint.

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?

Opens with a specific verb+resource+scope: 'Retrieve a paginated list of form submissions processed through your Checkout Page account.' It also distinguishes itself from the sibling get_submission by naming it for the single-record case.

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?

Provides explicit routing guidance (use pageId when you know the page ID, search with the title otherwise; follow up with get_submission for full payload) plus concrete example queries and support scenarios. When-to-use is unambiguous.

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

list_subscription_paymentsA
Read-only
Inspect

Retrieve a paginated list of subscription payment records for your Checkout Page account. Each record represents one per-Stripe-invoice charge against a subscription — a billing cycle payment, renewal, or failed attempt. Subscriptions rarely accumulate more than 24–36 payment records (2–3 years of monthly billing), so limit: 100 typically retrieves the full history for a single subscription in one call.

Pass livemode: false to read test-mode records.

Cross-tool routing:

  • Per-payment subscription history → this tool (list_subscription_payments)

  • Parent subscription record (status, plan, trial, coupon) → list_subscriptions

  • One-time payment charges → list_payments

  • Event/booking charges → list_bookings

Records do NOT overlap between tools — a transaction only appears in one tool. No risk of double-counting when combining results.

This tool is read-only. You cannot process refunds, cancel subscriptions, update payment methods, or retry failed payments. For these actions, explain what is currently on file. The merchant can manage subscription payments in the Checkout Page dashboard. The customer can update their payment method through the customer portal.

ParametersJSON Schema
NameRequiredDescriptionDefault
paidNoFilter by whether the invoice was fully collected. `true` = invoice paid in full, `false` = unpaid (use for "show me unpaid invoices"). Convenience field — an invoice can be `paid: true` even after a failed attempt followed by a successful retry.
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter subscription payments by page ID.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
refundedNoFilter by whether the payment was refunded. Combine with `createdAfter` to scope to a time window (e.g. "show me refunded subscription payments this month").
customerIdNoFilter subscription payments by customer ID.
createdAfterNoFilter by lower bound of `createdAt`. Use a UTC ISO 8601 timestamp with the `Z` suffix (e.g. `2026-03-01T00:00:00Z`). Never use local timezone offsets — dates are stored and compared in UTC.
billingReasonNoFilter by reason the invoice was generated. Valid values: manual, subscription_create, subscription_cycle, subscription_threshold, subscription_update, upcoming. `subscription_create`: first payment when the subscription is created and activated; the customer's initial charge. `subscription_cycle`: standard renewal at the end of a billing period. `subscription_update`: charge from a plan change or proration; can explain an unexpected charge after switching plans. `subscription_threshold`: metered billing usage threshold trigger. `manual`: manually triggered by the merchant. `upcoming`: preview of an upcoming invoice; not yet charged.
createdBeforeNoFilter by upper bound of `createdAt`. Use a UTC ISO 8601 timestamp with the `Z` suffix (e.g. `2026-03-31T23:59:59Z`). Never use local timezone offsets — dates are stored and compared in UTC.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
paymentStatusNoFilter by status of the underlying Stripe charge or payment intent. Valid values: succeeded, pending, failed, incomplete. Use `failed` to find failed attempts (e.g. "show me failed subscription payments"). Note: a record can have `paymentStatus: 'failed'` while the invoice is still `open` — if a later retry succeeded, both `paymentStatus` and `paid` reflect success. For overall invoice lifecycle use the `invoiceStatus` field on the response; for a simple "was this paid?" check use `paid`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.
subscriptionIdNoFilter by parent subscription ID. Use to retrieve the full per-cycle payment history for one subscription (e.g. "show me payments for subscription X" or "when was subscription X last charged?"). Results are newest-first by default, so the first record is the most recent payment.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is pre-covered and the restated 'read-only' line is partly redundant. The description does add genuine context beyond annotations: the non-overlap guarantee that prevents double-counting, the scale heuristic (24-36 records, so limit 100 usually gets full history), and the test-mode livemode:false behavior.

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?

Front-loads purpose, then routing, then constraints, with bullets doing real work. It is on the longer side and the closing read-only paragraph restates annotation-provided facts, but no sentence is filler and the routing table is dense with useful routing information.

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?

With an output schema present, the description need not explain return values. Between the record definition, routing, scale expectations, test-mode note, and read-only scope, an agent has everything needed to call this 13-parameter tool correctly without consulting other tools.

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?

Schema description coverage is 100%, so the baseline is 3 regardless. The description goes slightly beyond by giving the practical heuristic that limit: 100 retrieves the full per-subscription history and by calling out livemode: false for test mode, which helps an agent pick parameter values rather than just read their types.

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?

States a specific verb and resource ('Retrieve a paginated list of subscription payment records') and immediately defines what a record represents (one per-Stripe-invoice charge against a subscription). It explicitly differentiates from siblings by naming list_subscriptions, list_payments, and list_bookings and asserting the result sets do not overlap.

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?

Contains an explicit cross-tool routing block mapping four distinct intents to four tools, plus a when-not-to-use clause: it cannot refund, cancel, update payment methods, or retry payments, and it names the fallback (explain what is on file, dashboard, customer portal). Alternatives and exclusions are both given.

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

list_subscriptionsA
Read-only
Inspect

Retrieve a paginated list of subscriptions processed through your Checkout Page account. Pass livemode: false to read test-mode records.

For questions about a customer's full purchase history query the other transaction tools.

Example uses:

  • "Show me recent subscriptions" — use no filters or narrow with createdAfter

  • "Find the subscription for order ORD-9182" — filter by orderId

  • "Show me subscriptions for checkout page X" — filter by pageId

  • "Find subscriptions for jane@example.com" — use search (contains match on email)

  • "Find subscriptions for Jane Smith" — use search: "Jane Smith" (matches customerName)

  • "Show me Galactic Coffee subscriptions" — use search: "Galactic Coffee" (matches productTitle)

  • "How many active subscriptions do I have?" — filter by status: "active", read total. Note: also query status: "past_due" separately — past_due subscriptions are still active but at risk (see status guidance below).

  • "Show me canceled subscriptions" — filter by status: "canceled"

  • "What's my MRR?" — Tell the merchant they can see their MRR in the Checkout Page dashboard.

  • "Show me abandoned subscription checkouts" — use abandonmentStatus: "abandoned"

Money amounts: All monetary amounts are returned in the smallest currency unit (for example, 10661 USD = $106.61, 299 EUR = €2.99, 500 JPY = ¥500). Divide by 100 before displaying amounts to merchants or customers, noting that some currencies such as JPY do not use decimal minor units.

Example customer support uses:

  • Customer asking if their subscription is active — search by email or orderId lookup. Check status: if active, the subscription is healthy. If past_due, the subscription is still active but the payment method is failing — tell the customer to update their payment method through the customer portal. If canceled, report when it was canceled (canceledAt).

  • Customer asking when their next payment is — check currentPeriodEnd for the next billing date, amount for the charge amount, interval and intervalCount for the billing frequency (e.g. interval: "year", intervalCount: 1 = annual billing). Note: if the subscription has a coupon, the actual charge may be less than amount — check couponSnapshot for discount details.

  • Customer saying their payment keeps failing — search by email. Check status for past_due or failed. Check the paymentError field for a specific error message. Note: the troubleshooting depends on context — if this is the first payment to activate the subscription, the customer may need to retry with a different payment method. If it's a recurring payment failing, the customer should update their payment method through the customer portal. If the customer has multiple subscriptions, only some may be failing — distinguish them clearly.

  • Customer wanting to cancel — orderId or email lookup, confirm what's on file (status, billing details, current period end). Subscription cancellation can be done by the merchant in the Checkout Page dashboard or by the customer through the customer portal.

  • Customer claiming they cancelled but are still being charged - check status and canceledAt. If status: "canceled" and canceledAt is set, the subscription was indeed canceled on that date. The currentPeriodEnd may still be in the future (the customer paid for the period). For the individual charges, use list_subscription_payments(subscriptionId: ...).

  • Customer asking for a refund on their subscription — confirm the subscription details (status, amount, how long active). If a refund has already been issued, report lastRefundAt (date), lastRefundReason (reason code), and lastRefundReasonNote (merchant notes). Refunds can be processed by the merchant in the Checkout Page dashboard.

  • Customer asking what plan they're on — check productTitle (human-readable product name, e.g. "Galactic Coffee Subscription"), amount, interval, and intervalCount. If the subscription has a coupon, also report the discount. Present the plan name with amount and billing frequency (e.g. "Galactic Coffee Subscription — $100/month").

  • Customer asking about their trial — check trialStart, trialEnd, and status. If status is trialing or scheduled and trialEnd is in the future, the trial is still active (trialing = free trial; scheduled = setup fee paid, billing starts later). If trialEnd is in the past, the trial has ended (billing should have started at startDate).

  • Customer asking about their total payments - this tool reports the current recurring charge (amount), billing frequency (interval + intervalCount), and how long the subscription has been active (from createdAt). For what was actually charged each cycle, use list_subscription_payments(subscriptionId: ...) and add up the payments.

  • Customer asking about a discount on their subscription — check couponSnapshot for the coupon code, label, and discount amount (amountOff or percentOff). Check couponSnapshot.duration to see how long the discount lasts (forever, repeating with durationInMonths, or once). Setup fee discounts are visible in setupFeeDiscountAmount.

  • Customer saying the name on their subscription is wrong — check customerName, billing.name (from the payment card), shipping.name, and the fields array for customer_name (from the checkout form). These often don't match. The merchant can update the name in the Checkout Page dashboard; the customer can update it through the portal.

Data limitations for common support questions:

  • Charge/payment history: For per-payment history of a subscription (when each charge happened, amount per cycle, refund details), use list_subscription_payments(subscriptionId: ...).

  • Refund details: lastRefundAt, lastRefundReason, lastRefundReasonNote available but only reflect the most recent refund. Per-refund history requires the dashboard.

  • Historical refund limitation: for records created before 2026-04-09T08:47:59.000Z, full subscription refund transaction history may be incomplete. A subscription can still show refund-related fields or a refunded state while older refund history is incomplete or missing. When reviewing older subscription records, only quote exact refund timing or refund details when the record explicitly includes them.

  • Email delivery: No email delivery data available through this tool. Email delivery can be verified and emails can be resent from the Checkout Page dashboard.

  • Access/entitlement: No content access or login status data.

  • Payment method updates: The merchant can update in the dashboard; the customer can update through the portal.

  • Cancellation metadata: canceledAt present on canceled records. canceledBy and reason are optional.

Date filters: Always use UTC timestamps with the Z suffix (e.g. 2026-03-01T00:00:00Z). Never use local timezone offsets — dates are stored and compared in UTC.

Limit and large response handling:

Use the right limit for the task:

  • Single-record lookups (order lookup, customer search): use limit: 10 or less.

Tips for common questions:

  • For count questions, use the status filter and read total. Remember: past_due subscriptions are still active — include them in "active" counts.

  • For single-customer lookups, use search with email or orderId.

  • A customer may have multiple subscription records (e.g. a failed attempt followed by a successful signup). Always check all returned records, not just the first one.

Subscriptions are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

Cross-tool routing:

Records do NOT overlap between tools — a transaction only appears in one tool. Payments, bookings, and subscriptions are separate record sets. No risk of double-counting when combining results.

Order lookup: If "look up order 12345" returns 0 results here, try list_payments(orderId: "12345") and list_bookings(orderId: "12345").

Full customer history: For "show me everything this customer has bought," query list_payments and list_bookings tools with the same customerId or search email and combine results.

Customer profile: For profile data (company, phone, billing email, tax ID), use list_customers or get_customer — subscription records have customerName, customerId, customerEmail, billing.name, and shipping.name but not the full profile fields.

This tool is read-only. You cannot cancel subscriptions, process refunds, update payment methods, change billing details, pause/resume billing, or switch plans. For these actions, explain what's currently on file. The merchant can manage subscriptions in the Checkout Page dashboard by navigating to the subscription record. The customer can manage their subscription through the customer portal.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter subscriptions by page ID.
searchNoSearch by customerEmail, customerName, productTitle, or orderId. Contains match.
statusNoFilter by subscription lifecycle status. Valid values: draft, draft_expired, incomplete, incomplete_expired, trialing, paused, scheduled, active, past_due, canceled, unpaid, failed, completed.
orderIdNoFilter by exact order ID.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
customerIdNoFilter subscriptions by customer ID.
createdAfterNoFilter by lower bound of createdAt.
createdBeforeNoFilter by upper bound of createdAt.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.
abandonmentStatusNoFilter by `abandoned` or `recovered` subscriptions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint/openWorldHint, and the description goes well beyond them: an explicit 'This tool is read-only' statement enumerating what cannot be done (cancel, refund, update payment method, pause/resume, switch plans), plus data-availability limits (no email delivery data, no access/entitlement data, incomplete pre-2026-04-09 refund history, only most-recent refund fields).

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

Conciseness3/5

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

Front-loaded and sectioned, which helps, but it is enormously long for a tool description and repetitive — the 'use list_subscription_payments for per-charge history' and 'update via dashboard or customer portal' points recur four or more times, and much reads like a support playbook rather than tool selection guidance.

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?

Given an output schema exists, return-value documentation is not strictly required, yet the description still explains the fields agents must interpret (status, currentPeriodEnd, couponSnapshot, paymentError, trial fields) and closes the loop on routing, pagination, and date formats. Nothing needed to invoke it correctly is missing.

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

Parameters5/5

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

Schema coverage is already 100%, yet the description adds real semantics: search is a contains match over customerEmail/customerName/productTitle/orderId, past_due counts as active for 'active' counts, UTC-only timestamps with Z suffix, cursor pagination rules (starting_after/ending_before mutually exclusive, max 100/default 10), and limit guidance for single-record lookups.

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?

Opens with a specific verb+resource+scope: 'Retrieve a paginated list of subscriptions processed through your Checkout Page account.' It immediately distinguishes itself from siblings by naming the other transaction tools and the cross-tool routing section clarifies that subscriptions, payments, and bookings are disjoint record sets.

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?

Gives explicit when-to-use examples ('Find the subscription for order ORD-9182' → orderId), when to prefer search vs. exact filters, and when to route elsewhere (list_subscription_payments, list_payments, list_bookings, list_customers/get_customer). It even states when the tool cannot answer (MRR in dashboard, refunds in dashboard).

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

list_tax_ratesA
Read-only
Inspect

List all fixed tax rates configured for this Checkout Page account.

Use this tool to find an existing tax rate before creating a new one or when setting up a page with tax.mode: "fixed". Check whether a suitable rate already exists — avoid creating duplicates.

This tool returns all rates — there is no filtering or pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond them — that the result is unfiltered and unpaginated, i.e. a complete dump — which matters for how an agent consumes it.

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

Conciseness5/5

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

Three short sentences, front-loaded with purpose then usage then a return caveat. No repetition of the title or annotations; every sentence adds a distinct fact.

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?

With an output schema present the description needn't explain return values, and annotations cover the safety profile. Purpose, usage, and the unfiltered/unpaginated return characteristic are all covered, so nothing an agent needs is missing.

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?

There are zero parameters and schema coverage is 100%, so there is nothing for the description to clarify. Baseline for a no-param tool is 4.

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?

States a specific verb (List) and resource (fixed tax rates) scoped to the Checkout Page account. It is clearly distinguishable from the sibling create_tax_rate without opening any schema.

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?

Explicitly states when to use it: to find an existing tax rate before creating a new one, or when configuring a page with tax.mode "fixed". It even names the anti-goal (avoid creating duplicates), so an agent knows both the trigger and the reason.

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

list_theme_propertiesA
Read-onlyIdempotent
Inspect

List the design and label properties a checkout page, event or form can override, with their value format and allowed values. A property with a fixed default (every label, and a few other properties) lists it; the others follow the page's theme. Read-only, from a fixed list of about 800 properties: narrow it with group, prefix or a search of one or two words, such as button radius or pay button color, since the whole list, or the whole elements group, is too long to read at once. A search lists the properties that match every word or, when none do, those that match any word, best match first, and at most 40 of them: total counts every match, and note says when to narrow the search or which word matched nothing.

prefix takes the path of the part of the page you are changing. elements.product.* is the product column (title, logo, pricing, pricePicker for the price options), elements.checkout.* the checkout column (cards, variants, ticketGroups, pwyw, confirmation), and elements.checkout.form.* the form (fields, button, priceBreakdown, paymentDetails, discountCode, manualPayments). The tokens, layout and labels groups are small enough to list whole.

Set them under themeOverrides on create_checkout_page, update_checkout_page, create_event, update_event, create_form and update_form, nested by path: tokens.colorPrimary is { "tokens": { "colorPrimary": { "light": "#1A73E8" } } }. Keys you leave out keep their value, and null resets a property, or everything under a key, to the theme default. Labels are the text customers see, so translate a page by setting them. hostedLayoutType (center, double or split) picks the page layout; layout.* properties style the layout they name.

Value formats by type:

  • color: { "light": ..., "dark": ... }, one color for light and one for dark color mode. The page shows the one for its color mode, tokens.colors. Either can be left out. Each is any CSS color value, for example #1A73E8, rgb(26 115 232), hsl(214 82% 51%) or a named color such as navy. The API refuses ;, {, }, < and > but doesn't check that the value is a valid color: an invalid one is stored, and the browser ignores it on the page.

  • font: a Google Fonts family name, such as Inter.

  • size, fontSize: a number of pixels, or "" for Auto when options lists it.

  • fontWeight: 100 to 900 in steps of 100.

  • toggle: true or false.

  • image: { "file": "<id>" }, the ID of an image uploaded with upload_file.

  • text: plain text or inline markdown, no HTML. customCss takes CSS instead.

  • select, shadow, alignment, fontStyle: one of options. When a property has options, only those values are accepted.

customCss needs a plan that includes custom CSS, and the Powered by Checkout Page and Powered by Stripe badges can only be changed with a paid subscription. A null reset works on any plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoOnly list one group. `tokens`: brand colors, fonts and corner radius used across the page. `layout`: backgrounds, images and column settings of each hosted layout. `labels`: the text customers see, which is also where translations go. `elements`: styling of single parts of the page, such as the title, price options, variants, form fields, pay button and trust badges. `customCss`: CSS added to the page, for changes the other properties cannot make.
prefixNoOnly list the properties under this path, matched on whole segments, for example `elements.product.pricePicker` or `elements.checkout.form.button`. The cheapest way to read the properties of one part of the page.
searchNoOne or two words for what you are changing, for example `button radius`, `pay button color` or `heading font`, or a path or key such as `colorPrimary`. Each word matches the start of a word in the property path or description, case-insensitively, so `radi` finds `borderRadius`. Common words such as `corner`, `rounded`, `pay button` and `colour` find the properties they mean. Lists the properties that match every word or, when none do, those that match any word, best match first, and at most 40 of them. Words such as `the`, `on` or `make` are ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe theme properties the page tools accept under `themeOverrides`.
noteNoSet when a search was cut to its best matches, matched only some of its words, or had a word nothing matches: what to change in the next call.
totalYesNumber of properties that match. A search returns at most the best 40, so `total` can be more than the rows in `data`.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld=false, but the description adds real behavioral context: a fixed list of ~800 properties, a 40-result cap per search with `total` and `note` semantics, plan gating for `customCss` and the Powered-by badges, and the fact that the API rejects `;{}<>` yet does not validate color values. That goes well beyond the annotation set.

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?

Purpose and narrowing advice are front-loaded, and the type-format list is bulleted and scannable. It is nonetheless long (several dense paragraphs) and some path/structure detail overlaps the schema, so it is efficient but not maximally tight.

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 complex read tool with an output schema present, the description supplies everything an agent needs to call it correctly: how to scope the query, the shape of the values, how to nest them under themeOverrides, reset semantics (`null`), and plan restrictions. Return values are correctly left to the output schema.

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?

Schema description coverage is 100% and the schema already documents group/prefix/search, so the baseline is 3. The description nonetheless adds usable semantics beyond it: the `elements.product.*` / `elements.checkout.*` / `elements.checkout.form.*` path structure, worked search examples (`button radius`, `pay button color`), and the any-word fallback ranking behavior.

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 opening sentence gives a precise verb (List) and resource (design and label properties a checkout page, event or form can override), plus the scope of what is returned (value format and allowed values). It is immediately distinguishable from sibling tools like list_themes, get_theme or update_theme.

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

Usage Guidelines4/5

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

It explicitly tells the agent when to narrow (`group`, `prefix`, `search`) because the full list or the `elements` group is too long to read at once, and notes which groups are small enough to list whole. It also routes the agent to the mutation tools where these properties are set (create/update_checkout_page, event, form), though it does not contrast with list_themes/get_theme directly.

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

list_themesA
Read-only
Inspect

List the themes your pages can use: your own and the built-in ones, sorted by id from highest to lowest, so a theme you create appears before older ones. Built-in themes were installed together, so their order doesn't follow createdAt. Use a theme's id as themeId on a page, or as baseThemeId to create a copy. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
scopeNoOnly return built-in themes (`global`) or themes your account created (`seller`).
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the description's closing 'Read-only' is redundant. It earns credit instead for disclosing non-obvious behavior: results are sorted by id descending, and built-in themes do not follow `createdAt` ordering, which affects pagination expectations.

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?

The opening sentence front-loads the core purpose and the sort behavior, and the trailing 'Read-only' is a cheap redundancy. The createdAt caveat is useful but slightly verbose, keeping it just short of ideal.

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?

With an output schema present and annotations covering the safety profile, the description only needs to add the sorting semantics and the downstream id usage — both of which it does. Nothing an agent needs to call the tool correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so limit, scope, and both cursor parameters are fully documented in the schema itself. The description adds only indirect color about id-based ordering, which loosely relates to the id-cursor pagination but does not extend the parameters' semantics. Baseline 3 is appropriate.

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?

States a specific verb and resource (list themes) and defines the exact scope: the account's own themes plus built-in ones. An agent can immediately tell this apart from get_theme, list_theme_properties, and create_theme without opening a schema.

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

Usage Guidelines4/5

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

Gives clear downstream context — use the returned id as `themeId` on a page or as `baseThemeId` to create a copy — which tells the agent why and how the result is consumed. However, it never names an alternative tool or a when-not condition (e.g., when to prefer get_theme for a single theme).

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

list_ticketsA
Read-only
Inspect

List individual attendee tickets from paid event bookings on the Checkout Page account - one record per attendee, with full check-in history and per-ticket revenue allocation. Pass livemode: false to read test-mode records. Use it for guest lists, door and check-in questions, and locating a named attendee. Each ticket carries checkInCode, the opaque check-in credential to encode when rendering the ticket QR code. Read-only; a booking produces several tickets, so for the order or payment behind them query list_bookings by bookingId.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoReturn only tickets for a single event page. Use this to build a guest list for one event.
searchNoCase-insensitive search matched against `attendeeEmail`, `attendeeName`, `ticketShortId` and `orderId`. The query is routed based on input shape: email-like inputs (`jane@example.com`) match `attendeeEmail` only; an 8-digit input (`64819115`) is treated as a whole order reference and matched exactly against `orderId`; other identifier-like inputs containing a digit, underscore or hyphen match `ticketShortId` and `orderId`; multi-word inputs match `attendeeName` and `ticketShortId`; any other single bare word falls back to a broad substring match across `attendeeName`, `attendeeEmail` and `ticketShortId`. Best default when the guest is identified by name, email, or the code on their ticket. A booking produces one ticket per attendee - always review all matches, not just the first.
statusNoFilter by ticket status. Valid values: PAID, CANCELED. Use "PAID" for tickets valid for admission and "CANCELED" for voided ones. An unfiltered list includes both.
orderIdNoExact match on the order reference shared by every ticket in a booking. Partial values do not match — use `search` for that.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
bookingIdNoReturn the tickets created by one booking. Use when you already have the booking from the bookings endpoint and want the individual attendee tickets.
customerIdNoReturn every ticket booked by one customer, across events. Useful when you already have the customer record.
createdAfterNoInclusive lower bound on ticket createdAt. ISO-8601 UTC datetime with the `Z` suffix (e.g. `2026-01-01T00:00:00Z`). Never use a local timezone offset — tickets are stored and compared in UTC.
ticketTypeIdNoReturn only tickets of one ticket type (e.g. VIP). Combine with `pageId` when the same type name exists on several events.
checkInStatusNoFilter by check-in state. Valid values: UNCHECKEDIN, CHECKEDIN. "CHECKEDIN" returns guests currently admitted; "UNCHECKEDIN" returns both guests who were checked back out and guests who have never been checked in.
createdBeforeNoInclusive upper bound on ticket createdAt. ISO-8601 UTC datetime with the `Z` suffix (e.g. `2026-12-31T23:59:59Z`). Never use a local timezone offset — tickets are stored and compared in UTC.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only safety profile, but the description adds real behavioral context beyond them: one record per attendee, cardinality (a booking produces several tickets), full check-in history and per-ticket revenue allocation, the checkInCode credential's purpose, and livemode test-vs-live behavior. This is genuinely useful disclosure.

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?

Front-loaded with the core purpose and one-record-per-attendee scope, then use cases, then the sibling routing. It is dense but nearly every sentence carries signal; slightly long but not padded.

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?

With 14 optional filters fully documented in the schema, an output schema present, and annotations covering safety, the description adds exactly the missing pieces: ticket cardinality, the checkInCode semantics, and the list_bookings handoff. Nothing an agent needs to call it correctly is absent.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema (including the elaborate search routing and date bounds). The description only restates livemode and mentions checkInCode, adding little parameter meaning beyond structured fields; baseline 3 is appropriate.

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?

States a specific verb+resource with clear scope: individual attendee tickets from paid event bookings, one record per attendee. It explicitly differentiates itself from list_bookings (for the order/payment behind the tickets) and update_ticket, so an agent can route without opening schemas.

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?

Names concrete use cases (guest lists, door/check-in questions, locating a named attendee) and gives an explicit routing rule: for the order or payment behind the tickets, query list_bookings by bookingId. When-to-use and the alternative are both stated.

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

list_webhooksA
Read-only
Inspect

List the webhook endpoints registered on this Checkout Page account, newest first, with their subscribed events, status and delivery counters. The signing secret is never returned and custom header values are shown as [hidden]; headers are viewed and edited at the returned dashboardUrl. This is how to find a webhook id for get_webhook or delete_webhook, and how to check whether a URL is already registered before calling create_webhook. Read-only. Webhooks are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventNoOnly return webhooks subscribed to this event, for example `payment.paid`.
limitNoNumber of records per page (integer, max 100, default 10).
statusNoOnly return webhooks with this status. Valid values: active, inactive, failed.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds non-obvious behavior: the signing secret is never returned, custom header values are masked as '[hidden]', headers are managed via dashboardUrl, results are newest-first, and starting_after/ending_before are mutually exclusive. These are genuine operational details beyond the annotations.

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?

Front-loads purpose and the routing guidance, with pagination details at the end. Slightly repetitive — 'newest first' appears in the opening sentence and again as 'sorted newest-first' — costing it the top score.

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?

With an output schema present and annotations covering the safety profile, the description supplies everything an agent needs: return-field highlights, masking behavior, sorting, and pagination rules. No gaps remain for a read-only list tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents event, status, limit, and the cursor params. The description mostly restates schema content (max limit 100/default 10, cursor mutual exclusivity) rather than adding new meaning, so the baseline 3 applies.

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?

States a specific verb (List) and resource (webhook endpoints) scoped to 'this Checkout Page account', and describes the returned fields (subscribed events, status, delivery counters). An agent can distinguish it immediately from get_webhook, create_webhook, and the other list_* siblings.

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?

Explicitly names when to use it: to find an id for get_webhook/delete_webhook and to check whether a URL is already registered before create_webhook. This routes the agent to sibling tools and states the triggering conditions, leaving nothing to inference.

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

prepare_subscription_cancellationA
Read-only
Inspect

This tool does not cancel the subscription. Cancellation happens only in the Checkout Page dashboard. The tool fetches the subscription, works out whether it can be canceled and what canceling changes, and returns the dashboard URL where a person performs the cancellation.

Returns:

  • The full subscription record (status, customer, amount, interval, current period dates).

  • guidance.eligible - whether cancellation can proceed (false for already-canceled or expired subscriptions).

  • guidance.options.timing - available timing choices (immediately, at_period_end, custom_date). Fixed-term plans (planIterations > 0) only support immediately.

  • guidance.options.currentPeriodEnd - the end of the current billing period, useful when choosing at_period_end.

  • guidance.sideEffects - plain-language consequences of canceling (the Stripe subscription ends and no further invoices generate; whether a cancellation is already scheduled).

Use list_subscriptions first to find a subscription ID, or get_subscription to view the full record without the cancellation guidance overlay.

Example uses:

  • "I want to cancel this customer's subscription - what should I know first?"

  • "Can subscription 6812fe6e9f39b6760576f01c still be canceled at the end of the period?"

  • "What changes if I cancel this subscription now?"

ParametersJSON Schema
NameRequiredDescriptionDefault
subscriptionIdYesThe ID of the subscription you intend to cancel. This tool returns eligibility, side effects, and a dashboard link — it does NOT perform the cancellation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
guidanceYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it readOnlyHint=true and destructiveHint=false, but the description adds substantial non-obvious behavior: it does not mutate anything, returns a dashboard URL for human completion, and encodes eligibility rules (false for already-canceled/expired) plus timing constraints (fixed-term plans only support 'immediately'). This is far beyond what the annotations convey.

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?

The critical caveat and the non-cancellation behavior are front-loaded, and the sections (caveat, Returns, cross-references, examples) are cleanly separated. Some of the 'Returns' detail overlaps with the existing output schema, so it is slightly longer than strictly necessary, but nothing is filler.

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?

Given the read-only nature and an output schema being present, the description fully covers what an agent needs: the surprising non-cancellation semantics, eligibility/timing, side effects, and how to obtain the required ID. Nothing essential is missing.

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?

Schema coverage is 100% and the single parameter is already well documented with a pattern and an inline note that cancellation is not performed. The description adds marginal value by telling the agent how to source the ID (via list_subscriptions), which is beyond the schema's scope.

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 description states a specific verb and resource and immediately disambiguates the most likely misunderstanding: it explicitly says 'This tool does not cancel the subscription' and explains what it actually does (fetches, evaluates eligibility/side effects, returns a dashboard URL). It also names siblings (list_subscriptions, get_subscription) so an agent can route correctly.

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?

It gives explicit when-to-use context ('Use list_subscriptions first to find a subscription ID, or get_subscription to view the full record without the cancellation guidance overlay'), states where the actual cancellation occurs, and provides concrete example phrasings that map to the tool's intended use.

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

regenerate_invoiceA
Destructive
Inspect

Regenerate the PDF for an invoice by id. Overwrites the stored billing details on the invoice with the current ones from the source payment and its customer, overwrites the PO number when the payment has one, and fills in the customer email, customer name and product title only where the invoice has none. It then replaces the existing hosted PDF - the previous PDF is not kept. Preserves line items, amounts, taxes, and status. The returned invoiceUrl is a fresh signed link.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the invoice to regenerate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.2/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description goes well beyond that by disclosing exactly what is overwritten (billing details, PO number), what is only filled when empty (email, name, product title), what is preserved (line items, amounts, taxes, status), and that the previous hosted PDF is discarded. This is unusually rich behavioral context.

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?

The purpose is front-loaded in the first sentence, and the remaining sentences each carry distinct, useful information about overwrite/preserve semantics. It is slightly dense and run-on, but nearly every clause earns its place.

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?

Annotations cover the safety profile and an output schema exists, so return values need not be explained; nonetheless the description notes the returned `invoiceUrl` is a fresh signed link. For a single-parameter mutation tool, nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

With one parameter at 100% schema description coverage and a defined pattern, the schema already documents everything about `id`. The description only echoes "by id" and adds no format or sourcing detail beyond the schema, so the baseline of 3 applies.

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?

States a specific verb and resource ("Regenerate the PDF for an invoice by id") and gives the exact scope of the operation. It is unambiguous, and no sibling tool performs this operation, so an agent can identify it without confusion.

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

Usage Guidelines3/5

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

The description thoroughly explains what happens when the tool runs, which implies when it is useful (after source payment/customer data changes). However, it never explicitly states when to choose this over alternatives like get_invoice or list_invoices, nor does it state preconditions or exclusions.

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

update_checkout_pageA
Destructive
Inspect

Update an existing checkout page's content and settings. Supports a subset of create's fields; read current values with get_checkout_page before a partial update. Prices, variants, stock and other product settings are not on the page: use update_product with the page's data.product.id. Custom fields are managed with create_field, update_field and delete_field. The change applies to the live page at once: customers see it right away. There is no undo, because the previous values are not kept. 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; changing it replaces the page's own theme settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxNoTax configuration for this page. Defaults to Stripe Tax when omitted.
feesNo
nameNoInternal 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`.
localeNo
pageIdYesThe ID of the checkout page to update.
statusNo
themeIdNoThe theme the page uses: one of your themes or a built-in one (see List themes). Changing it replaces all of the page's own theme settings, including order bump styling set in the dashboard, so the page looks like the theme. That drops the page's labels too, translations included: send the ones to keep in `themeOverrides` in the same request, which apply on top. The page's locale is kept.
imageIdsNoArray of images for the page gallery. All referenced file IDs must exist and belong to your account. Pass null to clear the gallery.
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. Field references inside upsell/confirmation redirect steps resolve by `fieldId` (get current field IDs from the page detail response) — the create-time `fieldKey` string is rejected.
googleIndexNoAllow Google to index this page for search results. Defaults to `true`.
notifyEmailNoEmail addresses to send notifications to. Supports comma separated emails.
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. To reference a field value, use `fieldId` (the persisted field ID, from the page detail response) instead of the create-time `fieldKey`. [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. To reference a field value, use `fieldId` instead of the create-time `fieldKey`. [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

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description goes well beyond them: changes go live instantly with no undo and no retained previous values, and changing themeId replaces the page's own theme settings including order bump styling and translations. These are non-obvious consequences an agent must know before calling.

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

Conciseness5/5

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

Six sentences, front-loaded with the core action and partial-update warning, then side effects, then the design-related parameters. Every sentence carries actionable information with no filler.

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 55-parameter mutation tool with an output schema present, the description covers scope, required pre-read, sibling routing, irreversible side effects, and the tricky theme/design parameters. Nothing an agent needs to call it safely is missing.

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?

Schema description coverage is 71%, so the schema carries most parameter detail. The description still adds value by explaining that themeOverrides and hostedLayoutType control design and customer-facing labels/translations, and that set themeId replaces page-level theme settings — guidance not fully captured by the field descriptions alone.

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?

States a specific verb and resource ('Update an existing checkout page's content and settings') and immediately scopes it against the sibling create tool ('supports a subset of create's fields'). An agent can distinguish it from create_checkout_page, update_product, and update_form without opening schemas.

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?

Explicit routing guidance: read current values with get_checkout_page before a partial update; use update_product for prices/variants/stock; manage custom fields via create_field/update_field/delete_field; use list_theme_properties and list_themes for design work. This is textbook when/when-not/alternatives.

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

update_couponA
Destructive
Inspect

Update an existing coupon in your Checkout Page account.

Only the fields you supply are changed; omitted fields are left as-is. Send null for maxRedemptions or redeemBy to remove that limit. pageIds and ticketTypeIds are replaced wholesale rather than merged - send the full list you want, or an empty array to clear it.

What cannot be changed: the discount itself. code, amountOff, percentOff, currency, duration, and durationInMonths are fixed once a coupon exists, because they are mirrored into Stripe. To change a discount, soft delete this coupon (deleted: true) and create a replacement with create_coupon.

Coupons created before 2025-10-04 cannot be updated at all — their redemption limits are synced with Stripe and the API returns a 400 saying so.

Ticket types are scoped through pages, so any ticketTypeIds must belong to the pageIds sent in the same request — or, when pageIds is omitted, to the pages already on the coupon.

This tool modifies live data. Every change applies to live checkouts at once. There is no undo, because the previous values are not kept. Setting deleted: true stops the coupon working at checkout immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoInternal name for the coupon.
deletedNoSet true to soft delete the coupon. It stops working at checkout but its data and redemption history are retained.
pageIdsNoThe pages this coupon can be used on. Replaces the existing list. An empty array clears it, making the coupon valid everywhere.
couponIdYesThe ID of the coupon to update. Use `list_coupons` first if you need to discover the coupon ID by code or label.
redeemByNoThe ISO datetime that this coupon must be used before. Send `null` to remove the expiry.
ticketTypeIdsNoThe ticket types this coupon can be used with. Replaces the existing list; an empty array clears it. Every ID must belong to a page in `pageIds` — or, when `pageIds` is omitted, to the pages already on the coupon.
maxRedemptionsNoThe total number of times this coupon can be redeemed across all customers. Doesn't limit a single customer from redeeming multiple times. Send `null` to remove the limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A5/5.0
Behavior5/5

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

With annotations already declaring destructiveHint=true and readOnlyHint=false, the description goes further by disclosing live-data impact, no undo because previous values are not kept, immediate effect of deleted:true, partial-update semantics, immutable fields, and the 400 error for old coupons. This is rich behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is long but tightly structured with bold headings for unchangeable fields, replacement behavior, and live-data impact. Every sentence carries operational weight, and the most important constraints are front-loaded after the opening sentence.

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 destructive mutation tool with seven parameters, one required field, and an output schema, this description covers invocation semantics, constraints, alternatives, failure modes, and safety implications. Nothing an agent needs to call it correctly appears missing.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds cross-field meaning that the schema does not: omitted fields remain unchanged, null removes limits, pageIds and ticketTypeIds are replaced wholesale, and ticketTypeIds must belong to the same pageIds or existing coupon pages. It also lists exactly which fields cannot be changed.

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 description states a specific verb and resource: updating an existing coupon in the Checkout Page account. It distinguishes this tool from create_coupon by naming the alternative for discount changes, and from list_coupons indirectly through the couponId discovery note in the schema. An agent can immediately tell this is the mutation path for existing coupons.

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?

It gives explicit when-to-use guidance: partial updates, null for removing limits, wholesale replacement for pageIds and ticketTypeIds, and soft deletion for stopping redemption. It also names the alternative workflow for changing immutable discount fields via create_coupon. The 2025-10-04 cutoff explains when this tool cannot be used at all.

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

update_customerA
Destructive
Inspect

Update the editable details of a customer record in your Checkout Page account.

Use list_customers first if you need to discover the customer ID by name or email. If the customer ID does not exist, returns a 404 error: "Customer not found".

Only the fields you supply are changed; omitted fields are left as-is. The address and shipping subdocuments use patch semantics — supply only the sub-fields you want to change. Send null for any optional field (or for a whole subdocument) to clear it. The primary email field cannot be cleared.

This tool modifies live data and notifies external systems. Every successful update sends a customer.updated webhook, carrying the full updated customer profile, to each endpoint the merchant has subscribed to that event.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCustomer full name. Send `null` to clear.
emailNoPrimary customer email address. Trimmed and lowercased before storage. Cannot be cleared via this endpoint.
phoneNoCustomer phone number. Send `null` to clear.
addressNoBilling address. Patch semantics — only the subfields you supply are changed. Send `null` to clear the whole subdocument.
shippingNoShipping details. Patch semantics — only the fields you supply are changed (including nested `shipping.address` subfields). Send `null` to clear the whole subdocument.
customerIdYesThe ID of the customer to update. Use `list_customers` first if you need to discover the customer ID by name or email.
companyNameNoCustomer company name. Send `null` to clear.
billingEmailNoBilling email address. Can be different from the primary email. Trimmed and lowercased before storage. Send `null` to clear.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses patch semantics, that omitted fields are untouched, that `null` clears optional fields/subdocuments, that `email` cannot be cleared, the exact 404 behavior, and critically that every successful update fires a `customer.updated` webhook to external endpoints. The destructiveHint/openWorldHint annotations are confirmed and enriched with concrete consequences.

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?

Front-loaded with purpose, then discovery guidance, then semantics, then the bolded side-effect warning — a sensible ordering with no filler sentences. Slight redundancy with the schema's per-field patch/null notes costs it the top mark.

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?

An output schema exists so return values need not be described, and the description covers the remaining unknowns an agent needs: partial-update semantics, clearing behavior, error behavior, and the external webhook side effect. Nothing material is missing for an 8-parameter mutation tool.

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?

Schema coverage is 100%, so the schema already documents most parameters; the baseline is 3. The description adds cross-field semantics not present in any single schema entry — the global 'only supplied fields change' rule, whole-subdocument patch/clear behavior, and the email-clearing exception — earning a modest bump above baseline.

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?

States a specific verb and resource ('Update the editable details of a customer record') with the account scope named. It also routes the agent to the sibling `list_customers` for ID discovery, so it is distinguishable from at least one adjacent tool without opening a schema.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite ('Use `list_customers` first if you need to discover the customer ID by name or email'), which is actionable context for a tool requiring a customerId. It does not state when NOT to use this tool (e.g. use get_customer for read-only inspection), so it stops short of full when/when-not guidance.

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

update_eventA
Destructive
Inspect

Update an existing event page's content and settings. Supports a subset of create's fields; read current values with get_event before a partial update. Custom fields are managed with create_field, update_field and delete_field, and ticket types with create_ticket_type, update_ticket_type and archive_ticket_type. The change applies to the live page at once: customers see it right away. There is no undo, because the previous values are not kept. 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; changing it replaces the page's own theme settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxNo
feesNo
nameNoInternal 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`.
titleNo
localeNo
pageIdYesThe ID of the event page to update.
statusNo
themeIdNoThe theme the page uses: one of your themes or a built-in one (see List themes). Changing it replaces all of the page's own theme settings, including order bump styling set in the dashboard, so the page looks like the theme. That drops the page's labels too, translations included: send the ones to keep in `themeOverrides` in the same request, which apply on top. The page's locale is kept.
imageIdsNo
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.
descriptionNo
funnelStepsNoOrdered funnel configuration for this page. Supports intermediate checkout steps, one-click upsells, and confirmation behavior. Field references inside upsell/confirmation redirect steps resolve by `fieldId` (get current field IDs from the page detail response) — the create-time `fieldKey` string is rejected.
googleIndexNoAllow Google to index this page for search results. Defaults to `true`.
notifyEmailNoEmail addresses to send notifications to. Supports comma separated emails.
redirectUrlNoURL to redirect to after payment. Applies if `afterPaymentAction` is `redirect`.
eventDetailsNoEvent-specific details like type, dates, location. Ticket-specific discounts (`discounts[].ticketTypeIds`) must reference existing ticket types by `{ id }` — update cannot create new ticket types to key against, so the create-time `{ key }` form is rejected.
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. To reference a field value, use `fieldId` (the persisted field ID, from the page detail response) instead of the create-time `fieldKey`. [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. To reference a field value, use `fieldId` instead of the create-time `fieldKey`. [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`.
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.
confirmationCheckoutTitleNoConfirmation title.
confirmationEmailShowLogoNoShow store logo in confirmation email.
showConfirmationEventNameNo
customizeEmailConfirmationNoUse a custom email confirmation template. If enabled, provide `confirmationEmailSubject` and `confirmationEmailMessage`.
confirmationCheckoutMessageNoConfirmation message. Accepts HTML or plaintext.
showConfirmationEventAddOnsNo
allowDynamicPreselectedPriceNo
showConfirmationEventTicketsNo
customizeCheckoutConfirmationNoIf set to true `confirmationCheckoutMessage` and `confirmationCheckoutTitle` will be displayed on the confirmation page. Defaults to `false`.
showConfirmationAddToCalendarNo
showConfirmationEventDateTimeNo
showConfirmationEventLocationNo
confirmationEmailShowStoreNameNoShow store name in confirmation email.
allowDynamicDiscountedFromPriceNo
showConfirmationEventMeetingLinkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description goes well beyond that: it says the change hits the live page immediately, that there is no undo, that previous values are not retained, and that setting `themeId` overwrites the page's own theme settings and labels including translations. These are exactly the consequences an agent must surface before calling a destructive write.

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?

The critical constraints (live effect, no undo) are front-loaded in the middle of the paragraph rather than buried, and every sentence carries actionable content. It runs long at roughly seven sentences and the sibling enumeration could be tightened, but there is no filler.

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

Completeness4/5

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

For a destructive 58-parameter update with an output schema, the description covers the highest-risk behaviors, partial-update guidance, and where to look up theme values. It does not state what happens to omitted fields beyond the 'subset of create's fields' hint, which is the one meaningful gap.

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

Parameters3/5

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

Schema description coverage is 53% across 58 parameters, so most parameters are documented in the schema, but the description adds real semantics for only a handful: `themeOverrides`, `hostedLayoutType`, and `themeId`. It correctly points to `list_theme_properties` and `list_themes` for valid values, but the large majority of the 58 parameters get nothing from the description, so it does not compensate for the coverage gap.

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 precise verb and resource ('Update an existing event page's content and settings'), and the sibling landscape (update_checkout_page, update_form) makes the scope unambiguous. It also flags that only a subset of create's fields is supported, which an agent needs in order to distinguish this from create_event.

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?

It gives an explicit prerequisite ('read current values with get_event before a partial update') and routes adjacent work to the correct siblings: fields to create_field/update_field/delete_field and ticket types to create_ticket_type/update_ticket_type/archive_ticket_type. When-to-use and when-to-use-something-else are both stated, not implied.

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

update_fieldA
Destructive
Inspect

Update one custom field on a checkout page, form, or event: label, element, type, options, required, hidden, default value, visibility rules and more. Only supplied properties change; options are replaced wholesale. Get field IDs from get_checkout_page, get_form, or get_event. Mutating.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoUsed to store field data in a predictable manner. Please note that you must use Customer Name and Shipping Address if you wish to use any of the shipping address data types. Do not set `type` when `element` is one of: `checkbox`, `quantity`, `tax-id`, `po-number`, `multiple-choice`, `multi-select`, `date-time`, `date`, `time`, `textarea`.
labelNoForm label for the input element.
orderNoDisplay order of this field. When omitted, order is determined by the position of the field in the array.
hiddenNoWhether this field is hidden from customers at checkout.
layoutNoHow a multi-select field is drawn at checkout: `dropdown` (the default) or `list`, a list of checkboxes. Ignored on other elements.
pageIdYesThe ID of the page the field belongs to.
collectNoWhether to collect only a billing address or both billing and shipping. Applies to `address` elements. Defaults to `billing`.
elementNoInput control used to render this field in checkout. Defaults to `text`.
fieldIdYesThe ID of the field. Field IDs are listed under `fields` in the page detail response from get_checkout_page, get_form, or get_event.
optionsNoSelectable options for `select`, `multi-select` and `multiple-choice` elements. Replaced wholesale: every option gets a new ID, so re-point any other field whose showHideLogic references one of these options afterwards. Options on a `multi-select` need different values (an option without a value uses its label), and options on a `multiple-choice` need different labels.
maxValueNoMaximum allowed value settings for this field.
minValueNoMinimum allowed value settings for this field.
pageTypeYesThe kind of page the field belongs to: `checkout`, `form`, or `event`. Use the type of the tool you fetched the page with (get_checkout_page, get_form, get_event).
requiredNoWhether this field must be completed before checkout can continue.
referenceNoExternal reference ID for integration purposes. Generated from the field type or label when omitted.
descriptionNoOptional helper text shown below the field label.
placeholderNoSpecifies a short hint that describes the expected value of an input element
defaultValueNoDefault value settings for the field.
showHideLogicNoConditional visibility rules for this field. `element.elementId` must be the ID of another field on the same page, and `value` an option ID on that field (or `TRUE`/`FALSE` for a checkbox). Read the IDs from the page detail response; create-time keys are rejected here.
defaultCountryNoISO 3166-1 alpha-2 country code used as the default for `address` elements. Defaults to `US`.
collectShippingPhoneNoWhether to collect a phone number alongside the shipping address. Applies to `address` elements when `collect` is `billing_and_shipping`. Defaults to `false`.
showSelectedDialCodeNoWhether to display the selected international dial code in phone inputs.
limitAllowedCountriesNoCountry restriction settings for country-based fields.
limitBillingCountriesNoRestrict the billing country list. Applies to `address` elements.
limitShippingCountriesNoRestrict the shipping country list. Applies to `address` elements when `collect` is `billing_and_shipping`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered; the description adds real context beyond them by disclosing that options are replaced wholesale (a destructive side effect) and that unsupplied properties are left untouched. It stops short of noting auth requirements or failure modes.

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

Conciseness5/5

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

Front-loaded with verb and resource, followed by the update semantics, the ID-sourcing prerequisite, and a one-word mutation flag. Every sentence carries information and nothing is padding.

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

Completeness4/5

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

For a 25-parameter mutation tool, the description plus the 100%-covered schema and existing output schema cover what an agent needs to invoke it. Gaps are minor: no mention of permission requirements or what happens when a referenced field/option ID is invalid.

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

Parameters3/5

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

Schema description coverage is 100%, with per-parameter descriptions covering the tricky cases (element/type interaction, showHideLogic value resolution, wholesale option replacement). The description's list of updatable properties is a useful summary but adds little the schema does not already document, so the baseline 3 applies.

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?

Specific verb 'Update' on a specific resource 'one custom field' scoped to checkout pages, forms, and events, with an enumeration of the updatable properties. It clearly distinguishes itself from siblings like create_field and delete_field without the agent needing to open any schema.

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

Usage Guidelines4/5

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

States the prerequisite for obtaining field IDs (get_checkout_page, get_form, get_event) and clarifies PATCH semantics ('Only supplied properties change'). It does not explicitly route the agent away from update_checkout_page or update_form, but the 'one custom field' scoping makes the boundary evident.

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

update_formA
Destructive
Inspect

Update an existing form page's content and settings. Supports a subset of create's fields; read current values with get_form before a partial update. Custom fields are managed with create_field, update_field and delete_field. 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; changing it replaces the page's own theme settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoInternal 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`.
titleNoPublic title shown to customers on the page.
localeNo
pageIdYesThe ID of the form page to update.
statusNo
fileIdsNoArray of file IDs for downloadable files. All file IDs must exist and belong to your account.
themeIdNoThe theme the page uses: one of your themes or a built-in one (see List themes). Changing it replaces all of the page's own theme settings, including order bump styling set in the dashboard, so the page looks like the theme. That drops the page's labels too, translations included: send the ones to keep in `themeOverrides` in the same request, which apply on top. The page's locale is kept.
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.
descriptionNoPage description shown to customers. Accepts HTML or plain text.
formDetailsNoForm behaviour settings.
funnelStepsNoOrdered funnel configuration for this page. Supports intermediate checkout steps, one-click upsells, and confirmation behavior. Field references inside upsell/confirmation redirect steps resolve by `fieldId` (get current field IDs from the page detail response) — the create-time `fieldKey` string is rejected.
googleIndexNoAllow Google to index this page for search results. Defaults to `true`.
notifyEmailNoEmail addresses to send notifications to. Supports comma separated emails.
redirectUrlNoURL to redirect to after payment. Applies if `afterPaymentAction` is `redirect`.
trackingCodesNoCustom tracking scripts to include on the page. Supports HTML `<script>` tags.
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. To reference a field value, use `fieldId` (the persisted field ID, from the page detail response) instead of the create-time `fieldKey`. [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. To reference a field value, use `fieldId` instead of the create-time `fieldKey`. [Learn more](https://checkoutpage.com/docs/articles/add-field-and-variant-data-to-redirect-url)
allowDynamicTitleNoAllow page title to be overridden via URL query parameters.
afterPaymentActionNoBehavior after checkout. `confirmation` shows the confirmation page. `checkout` redirects to `redirectPageId`. `redirect` sends the customer to `redirectUrl`. Defaults to `confirmation`.
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.
sendPaymentNotificationNoSend payment/submission notification emails to the store owner.
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.
confirmationCheckoutTitleNoConfirmation title.
confirmationEmailShowLogoNoShow store logo in confirmation email.
customizeEmailConfirmationNoUse a custom email confirmation template. If enabled, provide `confirmationEmailSubject` and `confirmationEmailMessage`.
confirmationCheckoutMessageNoConfirmation message. Accepts HTML or plaintext.
customizeCheckoutConfirmationNoIf set to true `confirmationCheckoutMessage` and `confirmationCheckoutTitle` will be displayed on the confirmation page. Defaults to `false`.
confirmationEmailShowStoreNameNoShow store name in confirmation email.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-read-only, so the safety profile is known. The description adds valuable specifics beyond that: changing themeId 'replaces all of the page's own theme settings' and 'drops the page's labels too, translations included', plus the partial-update contract. It could still say more about auth/permissions, but the destructive mechanics are well surfaced.

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?

Four front-loaded sentences that move from purpose to workflow guidance to design-field mechanics, with no filler. Dense but every sentence carries routing or behavioral information; only the themeOverrides/themeId sentence partially overlaps the schema.

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

Completeness4/5

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

For a 39-parameter destructive mutation with an output schema and full annotations, the description covers the high-risk pieces (themeId replacement side effects, partial-update pattern, field management, theme overrides) adequately. It does not attempt to enumerate the many minor flags, which is reasonable given the schema covers them.

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

Parameters3/5

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

Schema description coverage is 90%, so the schema already documents nearly every parameter (including themeId, themeOverrides, hostedLayoutType details). The description restates the themeOverrides/themeId semantics that the schema itself carries, adding little beyond it. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb+resource ('Update an existing form page's content and settings') and immediately scopes it against siblings: a subset of create's fields, get_form for reading, and create_field/update_field/delete_field for custom fields. An agent can distinguish this from update_checkout_page/update_event without opening any schema.

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

Usage Guidelines4/5

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

Gives concrete routing advice: read current values with get_form before a partial update, manage custom fields with the *_field tools, and consult list_theme_properties/list_themes before setting design fields. It stops short of explicitly disambiguating against sibling update_checkout_page/update_event, but the guidance present is specific and actionable.

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

update_productA
Destructive
Inspect

Update an existing product's prices, variants, stock, tax, files and other settings. This is where a page's pricing lives: use it, not update_checkout_page, to change what a page sells. Only the fields you supply change; prices[] and variants[] replace the full list, so read current values with get_product first. The change applies to every page that sells the product at once: customers see it right away. There is no undo, because the previous values are not kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuNoSKU of the product.
priceNoPatch the product's single price - top-level fields you omit keep their value, but `recurring` and `paymentPlan` are replaced whole: omitted sub-fields are not kept (interval defaults to month, intervalCount to 1, and trialPeriodDays, billingCycleAnchorConfig and startDate are dropped), so read the current config with `get_product` and re-send it in full when touching either. Valid only while the product has at most one price; products with multiple prices must be updated through `prices[]`. Ignored when `prices` is also sent. `billingType` and `payWhatYouWant` are fixed once a price exists. Cannot be null.
stockNoAvailable stock of the product.
titleNoProduct title.
pricesNoReplaces the full price list. Read the current prices with `get_product` first and include `id` on every price you want to keep; entries without an id are created and existing prices missing from the list are removed. At least one entry must be enabled. `billingType` and `payWhatYouWant` cannot change on an existing price. Takes precedence over `price` when both are sent.
fileIdsNo
taxCodeNoIf Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings.
imageIdsNoReplaces the product images with these image file IDs (upload with `upload_file`). Send `[]` to remove all images; null is not accepted.
variantsNoReplaces the full variant list; nothing is merged from the stored variants. Read the current variants with `get_product` first and include `id` on every variant and option you want to keep; entries without an id are created and existing ones missing from the list are removed. Send `[]` to remove all variants. Three fields do not round-trip from `get_product`: re-send each option image as `imageId: option.image.fileId` or it is dropped; option `discountedFromPrice` is not returned at all, so re-supply it or it is lost; and an option returned with `type: "pay_what_you_want"` must be sent back as `type: "one_time"` with `payWhatYouWant: true`. To link a discount to specific options, give those options a `key` and reference it in `discounts[].variantOptionIds[].key` in the same request.
discountsNoBulk discounts for the product. Use `checkout_quantity` when the discount should apply to the total checkout quantity. Use `variant_option_quantity` when the discount should apply only to specific variant options. In that mode, you must do all of the following in the same request: 1. Include `productData.variants`. 2. Give each target variant option a temporary `key` in `variants[].options[].key`. 3. Reference those exact keys in `discounts[].variantOptionIds[].key`. - `variants[].options`: [{ name: "Red", key: "red" }, { name: "Blue", key: "blue" }] - `discounts`: [{ quantityCondition: "variant_option_quantity", variantOptionIds: [{ key: "red" }, { key: "blue" }], minQuantity: 3, percentOff: 10 }] [Learn more](https://checkoutpage.com/docs/articles/bulk-discounts)
productIdYesThe ID of the product to update. Find it on a page response as `data.product.id` (see `get_checkout_page`).
descriptionNoDescription of the product. Accepts HTML or plain text.
pricePickerNoPrice picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order.
taxBehaviorNoIf Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.
limitPaymentsNoDuplicate-payment prevention settings for this product. Applies to one-time payments only.
defaultPriceIdNoID of the price pre-selected at checkout. Must reference an existing price `id` (after this update is applied). Cannot be cleared; set a different price instead.
fixedTaxRateIdsNoTax Rate IDs applied to this product (at most one). Send `[]` to clear; null is not accepted. Call `list_tax_rates` to find an existing rate.
variantsRequiredNoUse when no variants are marked as required but you still need the customer to select at least one variant option. Ignored when any variant is individually required. Defaults to `false`.
hasUnlimitedStockNoWhether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.
limitSubscriptionsNoConfiguration to limit the number of active subscriptions for this product. Used to cap subscriptions to a specific number.
generateLicenseKeysNoIf true, on purchase a license key for the product is generated
enableFileAccessForInactiveSubscriptionsNoAllow customers with inactive subscriptions to keep accessing file downloads.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds genuinely new context: only supplied fields change, prices[]/variants[] are wholesale replacements, the change is immediate across every page selling the product, and there is no undo. The only gap is it doesn't flag that productId must resolve to an existing product, but the safety profile is well covered.

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

Conciseness5/5

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

Five short sentences, zero filler, front-loaded with purpose then routing then mutation semantics. Every sentence carries decision-relevant information.

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?

Output schema and annotations already cover returns and safety, so the description only needs behavioral framing — which it supplies via patch/replace rules, cross-page propagation, immediacy, and irreversibility. Nothing needed to call this correctly is missing.

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?

Schema coverage is 95%, so the schema already documents nearly every parameter; per the rubric the baseline is 3. The description adds cross-field semantics not obvious from the schema — patch vs replace behavior and the recommendation to read current values first — which earns the bump to 4.

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?

States a specific verb+resource ('Update an existing product') and enumerates the field groups affected (prices, variants, stock, tax, files). It explicitly distinguishes itself from the sibling update_checkout_page by claiming pricing ownership ('this is where a page's pricing lives').

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?

Directly routes the agent: use this, not update_checkout_page, to change what a page sells, and points to get_product for reading current values before a replacement-style update. Names both the alternative and the prerequisite read.

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

update_themeA
Destructive
Inspect

Change a theme you created. Every page using it changes too. Keys left out of variables keep their value; null resets. Built-in themes are read-only: copy one with create_theme and baseThemeId.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTheme name, unique within your account.
themeIdYesThe theme ID, as returned by list or create.
variablesNoDesign and labels to set, in the same shape as a page's `themeOverrides`. Keys you leave out keep their value, and `null` resets a property, or everything under a key. Order bump styling, which only the dashboard can change, is kept. Call `list_theme_properties` for the supported properties.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare it is a destructive, non-read-only write. The description adds the real blast radius ('Every page using it changes too') plus partial-update semantics (omitted keys preserved, null resets) and a preservation guarantee ('Order bump styling... is kept'), all beyond what the structured fields convey.

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

Conciseness5/5

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

Three short sentences, each carrying distinct information (scope, side effect, merge semantics, read-only constraint), with the primary constraint and consequence front-loaded. No filler.

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 3-parameter mutation with an output schema and full annotation coverage, the description covers scope, side effects, partial-update behavior, and the read-only fallback. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents themeId, name, and variables. The description restates the merge/null-reset semantics that the variables schema description already spells out, adding no syntax or format detail beyond it; baseline 3 applies.

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?

States a specific verb and resource ('Change a theme') and scopes it ('you created'), which cleanly separates it from create_theme, get_theme, and delete_theme. An agent can identify the operation without opening the schema.

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?

Explicitly states when this tool cannot be used ('Built-in themes are read-only') and names the alternative path for that case ('copy one with create_theme and baseThemeId'). That is a when-not plus a concrete alternative, which is the strongest form of routing guidance.

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

update_ticketA
Destructive
Inspect

Update the attendee details (name and email) and metadata held on one event ticket. Use list_tickets first to discover the ticket ID by attendee name, email, or ticket short ID. Only supplied fields change, the booking and customer records are untouched, and the booking ticket PDF is regenerated when attendee details change. Metadata operations are per-entry: a value adds or overwrites its key, null deletes it, other entries survive. Mutating - confirm the target ticket before calling.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataNoPer-entry metadata operations, matching the ticket validation endpoint: each entry adds or overwrites its key, `null` deletes it, and entries not named are left untouched. A ticket holds at most 20 entries. Door staff also write metadata during check-in, so avoid replace-everything sync patterns.
ticketIdYesThe ID of the ticket to update. Use `list_tickets` first if you need to discover the ticket ID by attendee name, email, or ticket short ID.
attendeeNameNoAttendee name held on the ticket. Shown on the ticket PDF and the guest list. Send `null` to clear.
attendeeEmailNoAttendee email held on the ticket. Trimmed and lowercased before storage. Cannot be cleared via this endpoint. Changing it does not affect the booking or customer records.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag this as mutating (readOnlyHint=false, destructiveHint=true), and the description goes well beyond that: only supplied fields change, booking and customer records are untouched, the booking ticket PDF is regenerated on attendee changes, and metadata is merged per-entry rather than replaced. It also discloses that a null name clears while email cannot be cleared at all.

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?

Four sentences, all carrying operational weight, with the purpose front-loaded before the list_tickets prerequisite. Slightly dense, and the metadata merge rule is stated twice (once in prose, once in the schema), but there is no filler.

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?

An output schema exists, so return values need no explanation. For a 4-param mutation tool the description covers prerequisites, side effects (PDF regeneration, untouched booking/customer records), merge-vs-replace semantics, and the concurrent-writer caveat. Nothing an agent needs before invoking it is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so null-deletion semantics, key/value limits, and email normalization are already documented in the schema. The description largely restates those rules (null deletes a metadata key, null clears the name) rather than adding new semantics. Baseline 3 applies when the schema carries the parameter detail.

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?

States a specific verb (update) plus the bounded resource (attendee name/email and metadata on one event ticket) and the scope of what it does not touch. An agent can separate it from update_ticket_type, update_customer, or update_event without opening a schema. The 'one event ticket' framing makes the unit of work unambiguous.

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?

Names the discovery path explicitly ('use `list_tickets` first to discover the ticket ID by attendee name, email, or ticket short ID'), which is the practical blocker for calling this tool. It also adds a caution ('confirm the target ticket before calling') and a real operational exclusion ('avoid replace-everything sync patterns' because door staff also write metadata).

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

update_ticket_typeA
Destructive
Inspect

Update one ticket type on an event: name, price, capacity, sale window, visibility and more, or move it to another ticket group with moveToTicketGroupId. Only supplied properties change. Get the event, group and ticket type IDs from get_event. Mutating.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
priceNo
hiddenNo
pageIdYesThe ID of the event. Event IDs come from list_events, or the `id` that create_event returns.
statusNo
imageIdNoID of an image file for the ticket type, uploaded with `upload_file` (purpose `image`). Pass null to remove the current image.
pricingNo
capacityNo
feeAmountNo
referenceNo
saleEndOnNo
descriptionNo
maxQuantityNo
minQuantityNo
saleStartOnNo
ticketTypeIdYesThe ID of the ticket type. get_event lists each group's ticket types under `ticketGroups[].ticketTypes[].id`.
ticketGroupIdYesThe ID of the ticket group the ticket type is in now, from `ticketGroups[].id` in get_event. This does not move it: use moveToTicketGroupId for that.
hideWhenSoldOutNo
hideWhenNotOnSaleNo
hideWhenScheduledNo
pwywSuggestedPriceNo
discountedFromPriceNo
hideWhenUnavailableNo
moveToTicketGroupIdNoThe ID of another ticket group on the same event to move the ticket type to, from `ticketGroups[].id` in get_event. The move happens before the other changes. A ticket type that has sold tickets cannot be moved.
showTicketSaleDatesNo
triggerTicketTypeIdNoID of another ticket type on the same event whose sale end or sell-out makes this one available. Required when `availabilityBehavior` is `after_ticket_sale_ends`, `after_ticket_sold_out` or `after_ticket_ends_or_sold_out`. Find it under `ticketGroups[].ticketTypes[].id` in get_event. Pass null to remove the trigger.
availabilityBehaviorNo
showAvailableQuantityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered; the description's 'Mutating.' merely confirms it. The added value is the PATCH semantic 'Only supplied properties change,' which tells the agent omitted fields are left untouched — a genuinely useful behavioral disclosure beyond the annotations.

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?

Front-loaded with the verb and scope, then prerequisites, then the mutation note — four short clauses with no filler. The trailing 'Mutating.' is nearly redundant against destructiveHint/readOnlyHint annotations, a minor cost.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and the description covers purpose, ID sourcing, partial update and the move case. For a 28-parameter mutation tool it still omits the semantics of the large optional surface (pricing modes, availability behavior, quantity limits), leaving an agent to infer them from the schema alone.

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

Parameters3/5

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

With 28 parameters and only 21% schema description coverage, the description would need to compensate heavily, but it names only a handful (name, price, capacity, sale window, visibility, moveToTicketGroupId). Fields like pricing, availabilityBehavior, triggerTicketTypeId, feeAmount, minQuantity/maxQuantity and the hideWhen* family are left unexplained by the description, though some carry their own schema text.

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?

States a specific verb and resource ('Update one ticket type on an event') and enumerates the changeable surface (name, price, capacity, sale window, visibility) plus the distinct move operation. It is clearly separable from create_ticket_type and archive_ticket_type without opening any schema.

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

Usage Guidelines4/5

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

Gives a concrete prerequisite path: 'Get the event, group and ticket type IDs from get_event,' naming a sibling tool as the source of required IDs. It does not explicitly contrast with create_ticket_type or archive_ticket_type, but the update-vs-create/archive distinction is self-evident from the verb.

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

update_webhookA
Destructive
Inspect

Update a webhook's name, https URL, subscribed events or status (active/inactive to pause and resume). Only supplied fields change; events are replaced wholesale. Custom headers cannot be set here: they usually hold receiver credentials, so never ask the user for header values and give them the dashboardUrl from the response instead, where headers are edited. Existing headers are kept and their values are returned as [hidden]. Mutating; use list_webhooks to find the id.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe https URL Checkout Page POSTs event payloads to. Plain http is rejected.
nameNoInternal label for the endpoint, shown in the dashboard.
eventsNoEvents this endpoint receives. At least one is required; duplicates are ignored.
statusNoSet `inactive` to pause deliveries without deleting the endpoint, `active` to resume. `failed` is system-managed and cannot be set.
webhookIdYesThe webhook to update. Use list_webhooks to find the id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, and the description adds genuinely new context: only supplied fields change, events are replaced wholesale, headers cannot be set here, existing headers are preserved and returned as [hidden]. That explains the blast radius of the destructive mutation and the credential-handling constraint, well beyond what annotations convey.

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?

Single dense paragraph with the purpose front-loaded and every clause carrying information (partial-update semantics, wholesale event replacement, header restriction, id lookup). It is longer than average but not padded; a light structural break would help readability without losing content.

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?

An output schema exists so return values need not be spelled out, and the description still flags the relevant response element (dashboardUrl). For a destructive, open-world mutation with five parameters, the description covers scope, side effects, and the credential pitfall, leaving nothing an agent needs to call it safely.

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?

Schema description coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: events are replaced wholesale rather than merged, and status inactive pauses deliveries while active resumes them. This meaningfully clarifies update behavior of two parameters.

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 description opens with a specific verb and resource plus the exact updatable fields ("Update a webhook's name, https URL, subscribed events or status"), and it names list_webhooks as the way to obtain the id. An agent can distinguish this from create_webhook, delete_webhook and get_webhook without opening any schema.

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

Usage Guidelines4/5

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

It states the mutating nature, directs the agent to list_webhooks for the id, and gives a strong negative instruction: never ask the user for header values and instead hand back the response's dashboardUrl. It stops short of an explicit when-not-to-use rule or a named alternative for header editing beyond the dashboard pointer.

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

upload_fileAInspect

Upload a file into your Checkout Page account from a public URL.

Use this tool when you need a Checkout Page file ID to reference elsewhere in the API. The tool fetches the source file from url, uploads it to Checkout Page, and returns the stored file record.

Purpose matters:

  • purpose: "image" uploads a public image asset. Use this for page galleries, product galleries, ticket visuals, logos, hero images, and other media shown on the page.

  • purpose: "file" uploads a private downloadable asset. Use this for digital downloads attached to checkout pages, files restricted to certain product variants, and files delivered after a form submission.

How uploaded files are typically used:

  • Page gallery images on checkout pages, events or forms.

  • Product gallery images and variant-specific images

  • Ticket types where an image is needed

  • Downloadable files attached to products or checkout pages after purchase or forms after submission.

Input notes:

  • url MUST be a public URL. The MCP server will make a http request to directly download the resource.

  • filename is optional and overrides the stored filename.

  • Images uploaded as purpose: "image" must still be a supported image type upstream.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic URL of the file to fetch and upload into Checkout Page. The MCP tool downloads the file from this URL, then sends it to the Upload File API.
purposeNoUse `image` for public display assets such as page galleries, product galleries, ticket visuals, or similar media. Use `file` for private downloadable assets such as PDFs, digital downloads, or post-submission form downloads.image
filenameNoOptional filename override. If omitted, the tool derives a name from the source URL when possible.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior4/5

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

Adds useful behavior beyond annotations: the MCP server makes an HTTP request to download the resource from the public URL, filename can override the stored name, and image uploads must be supported upstream. Annotations already cover safety (readOnlyHint=false, destructiveHint=false, openWorldHint=true), but the description omits auth, rate-limit, or idempotency details.

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

Conciseness3/5

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

Front-loads the core action well, but the 'Purpose matters' section, the 'How uploaded files are typically used' list, and the 'Input notes' repeat much of the schema and each other. Sections like the typical-usage list add bulk without much new selection value.

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?

Given the presence of an output schema and annotations, the description is complete enough: it covers the source URL requirement, purpose semantics, filename override, and typical usage. Return values and safety profile are handled by structured fields, so no critical information is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents url, purpose, and filename. The description reinforces the public URL requirement and purpose values but does not add parameter semantics beyond what the schema provides.

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?

States a specific verb and resource: 'Upload a file into your Checkout Page account from a public URL.' It also clarifies the outcome ('returns the stored file record') and when a Checkout Page file ID is needed, making it easy to distinguish from the create_* and update_* siblings.

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

Usage Guidelines4/5

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

Clearly says when to use it: 'Use this tool when you need a Checkout Page file ID to reference elsewhere in the API.' It also explains the two purpose modes and their use cases, but it does not name alternative tools or explicit when-not conditions, so it falls short of a 5.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 58 tool updates
    • First observedadd_to_website
    • First observedarchive_ticket_type
    • First observedcreate_booking
    • First observedcreate_checkout_page
    • First observedcreate_coupon
    • First observedcreate_event
    • First observedcreate_field
    • First observedcreate_form
    • First observedcreate_tax_rate
    • First observedcreate_theme
    • First observedcreate_ticket_type
    • First observedcreate_webhook
    • First observeddelete_field
    • First observeddelete_theme
    • First observeddelete_webhook
    • First observedget_booking
    • First observedget_checkout_page
    • First observedget_customer
    • First observedget_event
    • First observedget_form
    • First observedget_invoice
    • First observedget_payment
    • First observedget_product
    • First observedget_submission
    • First observedget_subscription
    • First observedget_subscription_payment
    • First observedget_theme
    • First observedget_webhook
    • First observedlist_bookings
    • First observedlist_checkout_pages
    • First observedlist_coupons
    • First observedlist_customers
    • First observedlist_events
    • First observedlist_forms
    • First observedlist_invoices
    • First observedlist_payments
    • First observedlist_submissions
    • First observedlist_subscription_payments
    • First observedlist_subscriptions
    • First observedlist_tax_rates
    • First observedlist_theme_properties
    • First observedlist_themes
    • First observedlist_tickets
    • First observedlist_webhooks
    • First observedprepare_subscription_cancellation
    • First observedregenerate_invoice
    • First observedupdate_checkout_page
    • First observedupdate_coupon
    • First observedupdate_customer
    • First observedupdate_event
    • First observedupdate_field
    • First observedupdate_form
    • First observedupdate_product
    • First observedupdate_theme
    • First observedupdate_ticket
    • First observedupdate_ticket_type
    • First observedupdate_webhook
    • First observedupload_file

Publisher details

Operator
Checkout Page Technologies, Inc. · Publisher source
Vendor relationship
First-party · Publisher source
Restrictions
Requires a Checkout Page account (a free plan is available). Taking payments requires connecting your own Stripe account. · Publisher source

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding agents to set up crypto checkout integration by registering workspaces, creating paylinks and public payment invoices, configuring webhook endpoints, verifying webhook signatures, and checking stablecoin payment status.
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables interaction with the Conekta payment API to manage orders, customers, subscriptions, and financial transactions. It provides a comprehensive suite of tools for core payment operations like processing refunds, creating checkouts, and monitoring account balances.
    32
    2
    -
  • A
    license
    A
    quality
    A
    maintenance
    Merchant of record MCP server: create products, payment links, checkouts, subscriptions, invoices and discount codes, with VAT and sales tax handled in 135+ jurisdictions.
    4
    31
    14 npm
    4
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources