Skip to main content
Glama

Server Details

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

Ownership verified
Status
Healthy
Uptime
26.0% over 80 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4/5.0

Scored across 69 tools

Disambiguation4/5

Each tool targets a distinct resource+action, and the surface is unusually well partitioned: payments vs bookings vs subscriptions vs subscription payments are explicitly separated with cross-tool routing guidance, and page types (checkout/form/event) are cleanly split. The only residual ambiguity is in the product/order-bump cluster (create_product vs create_order_bump vs update_product vs update_checkout_page), which is documented but still easy to misselect in a hurry.

Naming Consistency5/5

Nearly all 69 names follow a strict verb_noun snake_case pattern (list_*, get_*, create_*, update_*, delete_*, archive_*), with domain prefixes (ticket_group, ticket_type, checkout_page). Deviations like prepare_subscription_cancellation, regenerate_invoice, reorder_order_bumps and upload_file are still verb-first and unambiguous.

Tool Count3/5

The 69 tools span a genuinely broad domain (pages, events, tickets, bookings, payments, subscriptions, invoices, coupons, themes, fields, webhooks, tax rates, files), so most earn their place. Still, the count is far past the point where an agent can hold the surface in view, and several granular ticket/field/theme operations could be consolidated or moved to dashboard handoffs.

Completeness4/5

Coverage is strong: full CRUD-ish lifecycle for pages, events, ticket groups/types, fields, coupons, themes, webhooks, order bumps, plus rich read-only transaction reporting and explicit routing across payment record types. Gaps are deliberate dashboard handoffs (refunds, cancellations, ticket transfers, submission edits, deleting checkout pages/events, deleting tax rates), which an agent can explain away but which leave some dead ends.

Available Tools

69 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.

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

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_groupA
Destructive
Inspect

Archive one ticket group on an event so the checkout no longer shows or sells it. It is archived, not deleted: the group, its ticket types and the tickets already sold are kept, and get_event still lists it with status archived. Ticket groups it triggered lose that trigger. update_ticket_group with status enabled brings it back. Get the event and group IDs from get_event. Mutating.

NameRequiredDescriptionDefault
pageIdYesThe ID of the event. Event IDs come from list_events, or the `id` that create_event returns.
ticketGroupIdYesThe ID of the ticket group. get_event lists the event's groups under `ticketGroups[].id`.

Output 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 annotations by clarifying that destructiveHint=true is a soft archive: the group, ticket types, and sold tickets are retained, get_event still lists it with status archived, and can no longer be sold. It also discloses the non-obvious side effect that triggered ticket groups lose that trigger, and confirms the operation is reversible.

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-loads the action and its effect, then layers retention semantics, side effects, and the reversal path in tight sentences. Every sentence adds information; nothing is redundant with the name or 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 annotations covering the safety profile and an output schema covering returns, the description supplies exactly the remaining context an agent needs: what is preserved, what changes for get_event, the trigger side effect, and how to undo it.

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 per-field descriptions and ID formats, so the schema already carries parameter meaning. The description only adds an ID-source hint, which is slightly at odds with the schema's stated source for pageId; 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 (archive one ticket group on an event) and immediately names the observable effect: checkout no longer shows or sells it. This is clearly distinguishable from sibling update_ticket_group, which the description explicitly names as the reversal path.

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 when-to-use context and an explicit alternative/reversal ('update_ticket_group with status enabled brings it back'), plus guidance that IDs come from get_event. Minor gap: it says event IDs come from get_event while the schema says pageId comes from list_events or create_event, so the sourcing hint is not fully consistent with the schema.

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.

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

NameRequiredDescription
dataYes

TDQS

A4.5/5.0
Behavior5/5

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

It goes well beyond the annotations, which only say destructive=true and readOnly=false, by disclosing that data and sold tickets are preserved, that get_event still lists the type with status archived, and that dependent ticket types lose their trigger. These side-effect and reversibility details are exactly what a mutating tool needs to disclose.

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 and effect, then the non-obvious semantics (archived not deleted), then side effects, then ID sourcing. Every sentence carries distinct information and 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?

With an output schema present, return values need not be explained, and the description covers purpose, persistence semantics, side effects, and parameter sourcing. 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%, so every parameter is already documented in the schema, including that IDs come from get_event. The description's line about sourcing IDs from get_event largely restates the schema rather than adding format or constraint detail, 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?

The description gives a specific verb (archive) and resource (one ticket type on an event) plus the effect ('no longer on sale'), and explicitly distinguishes the action from deletion. An agent can tell this apart from update_ticket_type or a hypothetical delete without reading further.

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 operative condition (take a ticket type off sale) and tells the agent where to source all three IDs from get_event, which is real usage guidance. It stops short of naming alternatives or exclusions (e.g., when to prefer update_ticket_type instead of archiving), so it is clear context rather than full 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' }

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

NameRequiredDescription
dataYes

TDQS

A4.9/5.0
Behavior5/5

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

Goes far beyond destructiveHint=true by enumerating concrete side effects: tickets issued, confirmation email with PDF, live-mode capacity decrement, booking.paid webhook, possible invoice generation, and no undo. The explicit non-idempotency warning and the full 409/403/400/429 guard list are exactly the kind of 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.

Conciseness4/5

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

Bold headers and front-loaded warnings make it highly scannable. It is long, and some content (comp accounting, the 400 on dual strategy) is repeated between the prose and the examples, so it is dense rather than perfectly lean.

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, high-blast-radius mutation with 8 params and nested objects, nothing material is missing: prerequisites (Stripe connection, sale windows), conflict rules between parameters, error taxonomy, and duplicate-prevention guidance are all covered. An output schema exists, so return-value detail is correctly omitted.

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 baseline would be 3, but the description adds real semantics: exactly one of paymentOption/complimentary must be supplied, couponId is rejected on comps, and each manualType maps to a distinct unpaid settlement flow. It also flags that `fields` must include the event's email field, which drives customer creation.

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 precise verb+resource+scope: 'Create a real event booking on an existing event, without collecting card payment.' It immediately distinguishes this tool from checkout-based creation ('that belongs on the event's own checkout') and from the read path (list_bookings), so an agent can route without consulting 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 states when to use each of the two mutually exclusive strategies with concrete scenarios (box-office, invoiced corporate, comped speakers/press) plus three worked examples. It also gives negative guidance: no retry on uncertainty (use list_bookings instead) and no cancellation/refund/transfer through this API (use the dashboard).

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.

  • Set disabled: true on a field to keep its settings but leave it off the page entirely. It is not rendered, cannot be revealed with show_fields, is not prefilled and is never submitted. The customer email field cannot be disabled.

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.

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.
formLayoutNoHow to arrange the page's form, top to bottom. Reference a field by `fieldKey`: the `key` you gave it in `fields` in this request. Each item is one of: `field` (`fieldKey`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.
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
coverProcessingFeesNoOptions that let customers choose to cover the processing fee. The list holds at most one option for now. Sending it replaces the whole list.
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. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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 plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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

NameRequiredDescription
dataYes

TDQS

A4.9/5.0
Behavior5/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 creation tool, and the description adds material context beyond them: the page is created published and immediately live at a hosted URL, tax defaults to Stripe Tax, fields default to name/email/address, and omitting the required email field causes failure. It also explains side-effect semantics for disabled fields and supported payment-option combinations.

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 definition is long, but it is front-loaded with purpose and organized under Fields, Tax settings, Payment options, and Example uses, so an agent can scan to the relevant section. It loses a point for some repetition with the schema descriptions, particularly the tax-mode and payment-combination explanations that are restated in structured fields.

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 57 parameters, numerous nested pricing and field structures, and an output schema, the description covers the decisions an agent must make: defaults, constraints that cause failure, tax prerequisites, and the follow-up add_to_website step. It also names the return fields, which is useful for chaining even though the output schema 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?

Although schema coverage is 72%, the description carries substantial meaning beyond the schema: it explains when to omit fields, the required email field constraint, the grouped address element versus flat fields, the three tax modes and their prerequisites, and the only supported payment-option combinations. The worked examples map natural language pricing requests directly onto productData.price / prices fields.

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 states a specific verb and resource ('Create a new checkout page with an attached product and pricing'), which lets an agent separate this from get_checkout_page, update_checkout_page, and list_checkout_pages without opening the schema. It also names what the page contains, so the scope is 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?

Explicitly says to use it 'whenever a merchant wants to start accepting payments' and instructs a minimal page when the request is vague. It routes to concrete alternatives in the same ecosystem: list_theme_properties for design, list_themes for themeId, list_tax_rates/create_tax_rate for fixed tax, and add_to_website as the next step for website work.

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.

Where and what a coupon discounts:

  • rules lists where the coupon works and what it discounts: [{ pageId, appliesTo, priceIds, ticketTypeIds, bumpProductIds }]. Omit it (or send an empty list) for a coupon that discounts the whole order on every checkout page and event.

  • A coupon works on any page a rule names. Several rules on one page are combined with OR. An event can't mix tickets and ticketsAndAddOns rules.

  • Checkout pages: wholeOrder (the main product at any price and every order bump), prices (applies when the customer buys one of priceIds, discounting that price only), pricesAndBumps (applies only when the customer buys one of priceIds AND one of bumpProductIds, discounting both).

  • Events: wholeOrder (every ticket and add-on), tickets (applies when the customer buys one of ticketTypeIds, discounting those tickets only), ticketsAndAddOns (applies only when the customer buys one of ticketTypeIds AND one of bumpProductIds, discounting both).

  • priceIds are the ids of the page's main product's prices (from get_product), not Stripe price ids. bumpProductIds are products of order bumps or add-ons on that page. Leave priceIds, ticketTypeIds or bumpProductIds empty for every price, ticket type, bump or add-on on the page, including ones added later. A page with no bumps or add-ons cannot use pricesAndBumps or ticketsAndAddOns.

  • When no rule matches the order, the code is accepted but discounts nothing. Setup fees and ticket fees join with appliesToSetupFee and appliesToTicketFees.

  • pageIds and ticketTypeIds are deprecated: use rules. They are still accepted without rules (each page whole order, or tickets on an event with picked ticket types).

How discount types work:

  • amountOff is a fixed amount discount. It requires currency. It comes off once per order, shared equally across the lines the coupon applies to (on a subscription it stays on the main recurring line).

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

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

NameRequiredDescriptionDefault
codeYesThe coupon code a customer enters.
labelYesInternal name for the coupon.
rulesNoWhere the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event.
pageIdsNoDeprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`.
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, in the smallest currency unit of `currency` (for example `500` USD is $5.00 and `500` JPY is ¥500). 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).
ticketTypeIdsNoDeprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`.
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

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 a non-read-only, non-destructive write, so the description must supply behavioral context — and it does: no matching rule means the code is accepted but discounts nothing, several rules on a page combine with OR, events cannot mix tickets and ticketsAndAddOns, and deprecated pageIds/ticketTypeIds are still accepted only without rules. That is genuine edge-case behavior an agent could not infer 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.

Conciseness3/5

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

The purpose and usage are front-loaded and the bold section headers aid scanning, but the middle bullet enumerating wholeOrder/prices/pricesAndBumps/tickets/ticketsAndAddOns reproduces the appliesTo enum description almost verbatim from the schema, adding length without new information. Roughly a third of the text is duplication of structured data.

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 needn't be described, annotations cover the safety profile, and the description covers the one genuinely hard part of this 14-parameter tool: how rules map pages, targets, and price/ticket/bump ids to actual discount behavior, including the empty-list and no-match cases.

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 already 100%, so the schema carries the field documentation, but the description adds real semantics: exactly one of amountOff/percentOff, amountOff is shared equally across eligible lines and requires currency, and priceIds are the page product's price ids rather than Stripe ids. Some of this merely mirrors the schema's own prose, which keeps 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 and resource ('Create a coupon for Checkout Page') and immediately scopes it to the merchant creating a customer-entered discount code. It is unmistakable against siblings like list_coupons, update_coupon, and create_checkout_page, which are distinct resources or operations.

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 clear triggering condition: 'Use this when a merchant wants a discount code that customers can enter on eligible pages.' It does not, however, name the alternative (update_coupon) for modifying an existing coupon, nor state when not to use this tool.

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.

  • Ticket rules: give "VIP" a key and set showHideLogic: { enabled: true, ticketTypeIds: ["vip"] } on "Parking" to show Parking only while VIP is selected (display only).

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.

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.
formLayoutNoHow to arrange the page's form, top to bottom. Reference a field by `fieldKey`: the `key` you gave it in `fields` in this request. Each item is one of: `field` (`fieldKey`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.
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
coverProcessingFeesNoOptions that let customers choose to cover the processing fee. The list holds at most one option for now. Sending it replaces the whole list.
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. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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 plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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

NameRequiredDescription
dataYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the creation output fields (data.id, data.name, data.hostedUrl, data.dashboardUrl) and instructs the agent to call add_to_website next without waiting for the user. This meaningfully explains the workflow and post-creation behavior of an open-world creation tool. The annotations already cover safety, and the description adds operational context.

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 front-loaded with the core purpose and usage condition, followed by concrete examples and the required next step. Despite its length, every section adds useful guidance for a complex 60-parameter creation tool. It avoids repeating schema-only details in a wasteful way.

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 annotations, output schema, and complex nested ticket configuration, the description provides enough to select and invoke the tool correctly. It covers the purpose, primary data model, pricing/date formats, theme guidance, return values, and follow-up action. The remaining parameter details are left to the schema, which is appropriate.

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?

The description adds useful meaning beyond the schema by explaining that an event contains ticket groups and ticket types, that prices are integers in the smallest currency unit, and that dates are ISO 8601. It also clarifies themeOverrides, hostedLayoutType, themeId, capacity, and ticket visibility rules with examples. With 60 parameters and only 53% schema description coverage, it still leaves many top-level parameters unmentioned, so it is strong but not comprehensive.

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 description states a specific verb and resource: "Create a new event for selling tickets to an event." It also defines the event domain with ticket groups and ticket types, making the purpose clear. It does not explicitly name sibling tools such as create_checkout_page or create_form to sharpen the distinction, so it stops 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 Guidelines4/5

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

It gives an explicit when-to-use condition: "Use this tool when a merchant wants to publish an event that sells tickets." It also prescribes the follow-up step through add_to_website when building a website. It does not explicitly state when not to use this tool or name update_event as the alternative for edits, leaving a small gap.

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. formLayout on the page decides the form's order. Each field's order is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's order. On a page that has never saved a layout, setting order moves the field; once a layout is saved, move fields with formLayout instead. 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.

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.
orderNoPosition of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead.
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.
disabledNoWhether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.
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.
referenceNoStable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks.
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

NameRequiredDescription
dataYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations declare mutating, non-destructive, open-world behavior, but the description adds substantial context beyond them: that saving a layout rewrites every field's `order`, that visibility rules must reference persisted IDs from the page detail response (create-time keys are rejected), and that changing `reference` breaks exports/integrations. These are real operational consequences an agent could not derive from the schema or annotations alone.

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 and the mutating warning before the detailed layout mechanics. The ordering/layout passage is long and duplicates the schema's `order` text verbatim, costing some density, but no sentence is irrelevant to correct invocation.

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 with a full schema, output schema, and rich annotations, the description covers the genuinely subtle hazards: layout-driven reordering, ID requirements for visibility rules, integration-breaking `reference` changes, and the create-vs-update boundary. Only the omission of any mention of update_field keeps it short of complete.

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 baseline is 3, and most of the description's parameter explanation (the `order`/layout paragraph) is a near-verbatim repeat of the `order` schema description. It does add cross-tool framing by referencing `formLayout`, a page-level concept not present in this tool's schema, but overall it contributes little beyond the already-rich 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 ('Add one custom field to an existing checkout page, form, or event') and names the destination scope. It also distinguishes itself from the create_page tools by saying to pass fields to the create tool when building a new page, so an agent can tell it apart from create_checkout_page/create_form/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 Guidelines4/5

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

Explicitly routes new-page field creation elsewhere ('to add fields on a new page, pass fields to the create tool instead') and explains when to use `order` versus `formLayout` for reordering. It never mentions the sibling update_field, leaving the create-vs-update choice to inference.

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.

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.
formLayoutNoHow to arrange the page's form, top to bottom. Reference a field by `fieldKey`: the `key` you gave it in `fields` in this request. Each item is one of: `field` (`fieldKey`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.
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. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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 plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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

NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so safety profile is partly covered; the description adds real behavioural context no annotation carries: the concrete return fields, and the mandatory follow-up with add_to_website that should not wait for the user. It omits permission/authorization requirements and publication state, keeping it below 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 the minimal-request rule, followed by design pointers and the required follow-up step. Well organised, though the return-field list is partially redundant with the output schema and could be trimmed.

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 creation tool with an output schema, the description supplies the missing workflow context (next step, minimal request, theme lookup) that the schema cannot. It stops short of discussing the formLayout/fields relationship and form-specific constraints, which is a modest gap given the tool's complexity.

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 92%, so per-field documentation is already done. The description adds only light guidance, pointing agents at themeOverrides/hostedLayoutType, saying to consult list_theme_properties and list_themes for themeId. Useful cross-references, but most parameter meaning comes from the schema, so the baseline 3 holds.

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 new form page for lead capture or submissions') and frames the artifact's role, which separates it from create_checkout_page and create_event. The follow-up instruction naming add_to_website makes the tool's place in the workflow unambiguous.

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 usage context ('when a merchant wants to publish a form...') and an explicit minimal-request policy plus when to add optional fields. It never explicitly excludes sibling alternatives such as create_checkout_page ('use that instead for payments'), so the routing guidance is strong but not fully comparative.

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

create_order_bumpAInspect

Offer an order bump product on a checkout page or event (an add-on on events). It is added last. Create the product first with create_product, or find one with list_products (role: orderbump). Mutating.

NameRequiredDescriptionDefault
hiddenNoHide the order bump unless the page URL reveals it with `?show_order_bumps=` and the product price reference.
pageIdYesThe ID of the checkout page or event. Use the type you fetched it with (get_checkout_page or get_event).
enabledNoWhether the order bump is offered. A disabled order bump stays on the page but is not shown.
pageTypeYesThe kind of page the order bump is on: `checkout` for a checkout page, `event` for an event (where order bumps are shown as add-ons).
productIdYesID of a product with `role: orderbump` (create one with create_product, find one with list_products). It must share the page currency, have one enabled price that is not a payment plan, and not already be sold or offered on this page.
preselectedNoWhether the order bump is ticked when the page loads.
allowQuantityNoLet the customer pick a quantity. Off, the order bump is bought once.
showHideLogicNoRule that shows the order bump only for some selections. Sent whole: it replaces the stored rule.
shortenDescriptionNoClamp a long description behind a Show more toggle.

Output Schema

NameRequiredDescription
dataYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so 'Mutating' adds little. Beyond that, the description doesn't cover whether re-adding a bump on the same page fails, what happens to existing bumps, or the returned resource — though the product eligibility constraints (currency match, single enabled non-plan price, not already offered) do add real 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?

Three short sentences, front-loaded with purpose, then prerequisites, then mutation flag. No waste, though the trailing 'Mutating.' is largely redundant with annotations.

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?

Given 9 parameters (one nested object), full schema coverage, an output schema, and annotations, the description covers the essentials an agent needs: what gets created, where, its position, and the prerequisite product state. Missing only edge-case behavior for duplicate/failed creation.

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 nested showHideLogic is fully documented in-schema, so the baseline applies. The description only restates the product prerequisite, adding nothing about pageType/pageId selection or the show/hide rule that the schema doesn't already say.

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 and resource (offer/create an order bump) with the exact scope (checkout page or event, shown as an add-on on events) and the ordering constraint ('added last'). An agent can distinguish it from update_order_bump, reorder_order_bumps, and create_product 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 Guidelines4/5

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

Explicitly lays out the prerequisite path: create the product with create_product or find one with list_products (role: orderbump). It does not say when to prefer update_order_bump over creating a new bump, but the creation context is unambiguous.

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

create_productAInspect

Create an order bump product (role: orderbump): the title, price, image and card copy an order bump shows. Then offer it on a checkout page or event with create_order_bump. Page products are created with their page instead. Mutating.

NameRequiredDescriptionDefault
skuNoSKU of the product.
roleYesMust be `orderbump`: only order bump products are created on their own. A page product is created with its page (create_checkout_page, create_event).
priceNoThe order bump price. Order bumps use a one-time price, which can be pay what you want: recurring prices and payment plans are not available. Defaults to a one-time price of 0 in `usd`.
stockNoAvailable stock of the product.
titleYesProduct title, shown on the order bump card.
fileIdsNoFiles for the product. Available to the customer after purchase.
taxCodeNoIf Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings.
featuresNoShort list of what the customer gets, shown above the description on the order bump card. Replaces the whole list; send [] or null to clear. Order bump products only.
imageIdsNoImage file IDs for the product (upload with `upload_file`). The first is shown on the card.
calloutIconNoIcon leading the call out box. Send null to clear. Order bump products only.
calloutTextNoCall out box under the description on the order bump card. HTML: links and inline emphasis are kept, anything else is removed. Send null to clear. Order bump products only.
descriptionNoDescription of the product. Accepts HTML or plain text.
headingTextNoHeading shown above the order bump card, e.g. "Special one time offer". Send null to clear. Order bump products only.
taxBehaviorNoIf Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.
fixedTaxRateIdsNoTax Rate IDs applied to this product (at most one). Call `list_tax_rates` to find an existing rate.
callToActionTextNoAccept copy on the order bump card, e.g. "Yes! Add gift wrapping". Send null to clear. Order bump products only.
shortDescriptionNoPlain-text one-liner shown under the title on the order bump card. Send null to clear. Order bump products only.
hasUnlimitedStockNoWhether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.

Output 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=false, destructiveHint=false and openWorldHint=false, so 'Mutating.' is largely redundant, but the description adds real value by disclosing scope (only order-bump products can be created standalone) and the required follow-up step with create_order_bump. It does not cover failure modes or what happens if the follow-up is skipped, so it stops 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.

Conciseness5/5

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

Three sentences, each load-bearing: what it creates, what to call next, and what it does not cover. The scope constraint is front-loaded before the sibling routing.

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 an output schema, full param coverage and annotations, the description only needs to establish scope and sequencing, which it does. The only residual gap is that it doesn't hint at the two required fields (role, title), though the schema marks 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% across 18 parameters, so the schema carries the semantics; the description only summarizes that title, price, image and card copy are set here. It adds no field-level guidance beyond that, which is the baseline expectation when the schema is this complete.

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 a narrow, precisely-qualified resource: 'Create an order bump product (`role: orderbump`)'. It immediately names what the product consists of (title, price, image, card copy) and explicitly excludes page products, so an agent can distinguish it from create_checkout_page/create_event 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 the full routing picture: use this for order bump products, use the page tools for page products, then call create_order_bump to actually offer it on a checkout page or event. Both the when and the when-not are stated with named alternatives.

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).

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

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.

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

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_groupAInspect

Add one ticket group to an existing event: name, description, a capacity shared by its ticket types, sale window, availability trigger, selection type, bulk discounts and display options. The new group has no ticket types: add them with create_ticket_type. Get the event ID from list_events. Mutating; to create a new event with its tickets in one call, use create_event instead.

NameRequiredDescriptionDefault
nameYes
hiddenNo
layoutNo
pageIdYesThe ID of the event. Event IDs come from list_events, or the `id` that create_event returns.
statusNo
capacityNo
preselectNo
referenceNo
saleEndOnNo
feeDisplayNo
descriptionNo
saleStartOnNo
bulkDiscountsNo
hideWhenSoldOutNo
hideWhenNotOnSaleNo
hideWhenScheduledNo
hideWhenUnavailableNo
ticketSelectionTypeNo
availabilityBehaviorNo
triggerTicketGroupIdNoID of another ticket group on the same event whose sale end or sell-out makes this group available. Required when `availabilityBehavior` is `after_ticket_sale_ends`, `after_ticket_sold_out` or `after_ticket_ends_or_sold_out`. Find it under `ticketGroups[].id` in get_event.

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.3/5.0
Behavior4/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, and the description adds non-obvious behavioral facts: the operation is mutating and the new group is created empty. It does not discuss permissions, error cases or what the response contains, but the output schema exists, so this is a minor gap.

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 dense sentences, front-loading the action and its payload, then prerequisites, then the sibling alternative. No filler or restatement of the title.

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 20-param mutation with annotations and an output schema, the description supplies the essential workflow (event ID source, empty-group caveat, ticket-type follow-up, escaping to create_event). The remaining shortfall is the thin coverage of individual optional fields.

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?

With 20 parameters at only 10% schema description coverage, the description must carry the semantics, yet it only name-drops broad groupings. Many inputs remain unexplained — status, reference, preselect, feeDisplay, layout internals, and the four hideWhen* booleans — so an agent still cannot tell what setting them does beyond their enum 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?

Specific verb ("Add") plus resource ("one ticket group to an existing event"), and it enumerates the sub-concepts the group carries (capacity, sale window, availability trigger, selection type, discounts, display options). It also names the sibling it is not (create_event), so an agent can distinguish 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 Guidelines5/5

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

Explicit routing is given: get the event ID from list_events, add the group's ticket types afterwards with create_ticket_type, and use create_event instead when creating an event together with its tickets. Conditions for the alternatives 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.

create_ticket_typeAInspect

Add one ticket type to a ticket group on an existing event: name, price, capacity, sale window, display options, and a showHideLogic rule that shows it only while other ticket types are (or are not) selected. Get the event and group IDs from get_event; create_ticket_group adds a new group. Mutating; to create a new event with its tickets in one call, use create_event instead.

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
showHideLogicNo
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

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 and destructiveHint=false, so 'Mutating' adds little; the description does add that the tool attaches to an *existing* event and group, and explains the conditional-visibility semantics of showHideLogic. It says nothing about permissions, whether sale-window values are validated against the parent event, or what happens when capacity conflicts with the group.

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?

Three tight sentences, front-loaded with the core action and scope before the ID-sourcing and alternative-tool guidance. No filler; the middle clause listing field families is dense but earns its space as a map of the payload.

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

Completeness2/5

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

For a 27-parameter creation tool with sparse schema descriptions, the description gives almost no help on how to fill the payload. It does correctly defer return values (output schema exists), but an agent still cannot determine valid combinations such as availabilityBehavior plus triggerTicketTypeId from this text.

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?

27 parameters with only 15% schema description coverage, and the description only gestures at 'price, capacity, sale window, display options' without explaining the significant ones (availabilityBehavior's six modes, triggerTicketTypeId dependencies, pricing=paid/free/pwyw, min/maxQuantity, the six hideWhen* flags). It does meaningfully explain the showHideLogic comparison rule, but that single clarification 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?

States a specific verb and resource ('Add one ticket type to a ticket group on an existing event') and even enumerates the field families it accepts (name, price, capacity, sale window, display options, showHideLogic). This is clearly distinguishable from create_event (whole event) and create_ticket_group (the container).

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: get_event for the event and group IDs, create_ticket_group if a new group is needed, and create_event instead if the goal is a new event with tickets in one call. Both the prerequisite and the sibling alternative are named with their selecting conditions.

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.

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

NameRequiredDescription
dataYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), while the description adds substantial behavior: persistent account configuration requiring confirmation, the signing secret never being returned and being viewable only via the dashboard's actions menu, header auth being impossible here, and hard failure modes (10-webhook cap, duplicate URL). Nothing in the text contradicts 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 happy path and then the hard constraints, with no filler sentences. It is longer than typical, but every paragraph addresses a distinct failure mode (missing URL, secret visibility, auth headers, limits), so the length is largely earned.

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 points at the meaningful response field (dashboardUrl) and the follow-up actions it enables. For a three-required-parameter write tool, the failure conditions and follow-up workflow for the receiving endpoint are fully covered.

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 provenance semantics the schema cannot express: the url value must be user-supplied and must never be a placeholder, and header-related fields are intentionally absent. The events enum itself is left entirely to the schema, which 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?

Opens with a specific verb and resource ('Register an HTTPS endpoint that receives Checkout Page event notifications') and enumerates the event families it covers. It also explicitly distinguishes itself from the sibling update_webhook for re-pointing an existing endpoint, so an agent can route correctly 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?

Gives explicit preconditions and exclusions: the URL must come from the user, never be invented or reused, and if absent the agent must ask and wait. It adds a confirmation requirement before calling and names update_webhook as the alternative for changing an existing endpoint's URL.

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.

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

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_order_bumpA
Destructive
Inspect

Stop offering an order bump on one checkout page or event. The product is kept and can be added again with create_order_bump. Prefer update_order_bump with enabled: false to pause it. Destructive: confirm with the user.

NameRequiredDescriptionDefault
pageIdYesThe ID of the checkout page or event. Use the type you fetched it with (get_checkout_page or get_event).
pageTypeYesThe kind of page the order bump is on: `checkout` for a checkout page, `event` for an event (where order bumps are shown as add-ons).
productIdYesThe ID of the order bump product placed on the page. Listed as `productId` by list_order_bumps.

Output 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 destructiveHint=true and readOnlyHint=false, but the description adds the non-obvious fact that the underlying product is NOT deleted, only the offering, and that it is recoverable via create_order_bump. It also instructs the agent to confirm with the user, which is real behavioral guidance beyond the raw flags.

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 and scope, followed by recovery, the preferred alternative, and the safety instruction. 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 not be described. For a destructive three-required-param mutation, the description covers scope, side effects, recovery, alternatives, and a confirmation requirement — 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.

Parameters3/5

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

Schema description coverage is 100%, so pageId, pageType and productId are already fully documented in the schema, including the enum and ID patterns. The description explains the conceptual target (one page/one product) but adds no syntax or edge-case 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 ('Stop offering') plus resource ('an order bump') plus scope ('on one checkout page or event'). It is immediately distinguishable from create_order_bump, update_order_bump, and list_order_bumps.

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 preferred alternative for pausing ('Prefer update_order_bump with enabled: false') and the recovery path if the bump is needed again ('can be added again with create_order_bump'). That is when-to-use, when-not-to-use, and alternatives all in one place.

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

delete_productA
Destructive
Inspect

Permanently delete an order bump product that has never been bought. A product still offered on a page is refused unless fromAllPages is true. Page products cannot be deleted here. Destructive and irreversible: confirm with the user, and prefer update_order_bump with enabled: false to stop offering it.

NameRequiredDescriptionDefault
productIdYesThe ID of the order bump product to delete.
fromAllPagesNoAlso remove the order bump from every page that offers it. Without it, deleting a product that is still offered on a page is refused.

Output 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 flag destructiveHint=true, but the description adds real value beyond them: irreversibility, the never-been-bought eligibility rule, the page-offering refusal behavior, and a user-confirmation requirement. These are operational constraints an agent cannot infer from the annotation block alone.

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 with no filler: action and scope first, then refusal conditions, then the destructive/alternative guidance. Front-loaded in the order an agent needs to reason about safety before calling.

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 tool with an output schema present (so return values need no explanation), the description covers eligibility, refusal behavior, parameter effect, irreversibility, and a safer alternative. Nothing material is left for the agent to guess.

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 productId and fromAllPages are already fully documented, including the refusal-without-fromAllPages behavior. The description paraphrases the same fromAllPages semantics rather than adding format, default, or edge-case detail beyond the schema; 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 ('permanently delete an order bump product') and immediately narrows scope with the eligibility constraint 'that has never been bought'. It also distinguishes itself from the similarly named delete_order_bump and update_product siblings by declaring what it will not touch ('Page products cannot be deleted here').

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-not conditions ('a product still offered on a page is refused unless fromAllPages is true', 'Page products cannot be deleted here') plus a named preferred alternative ('prefer update_order_bump with enabled: false to stop offering it'). The agent knows both the precondition for success and the softer option to route to instead.

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.

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

Output 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.

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

Output Schema

NameRequiredDescription
dataYesA webhook endpoint subscribed to one or more events.

TDQS

A4.4/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, so the safety profile is known. The description still adds real behavioral detail beyond that: deliveries cease immediately, the endpoint vanishes from list_webhooks, and delivery history is retained — the last being a non-obvious side effect an agent would otherwise have to guess. "Irreversible" mildly restates the destructive hint, keeping this just short of 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?

Four short sentences, front-loaded with purpose and followed by effects, then the safety instruction. Nothing is padding, though "Destructive and irreversible" overlaps partly with the destructiveHint annotation rather than adding fully new 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 destructive one-parameter mutation, the description covers side effects, retained data, irreversibility, and the lookup/confirmation workflow. An output schema exists, so return values need not be explained, and nothing an agent needs before calling 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 pattern plus "as returned by create or list" already documents the single webhookId parameter. The description only reinforces where to obtain the id, so the baseline of 3 is appropriate — the schema carries the load.

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 ("Delete a webhook endpoint by id"), which immediately separates it from siblings like delete_product or update_webhook. The scope (single endpoint identified by id) is 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?

Explicitly routes the agent to list_webhooks to obtain the id, and adds a procedural prerequisite to confirm with the user before invoking. This is both when-to-use guidance and an invocation precondition rather than vague context.

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.

archivedAt is set when the merchant archived the booking to hide it from their default bookings list. Archiving changes nothing else: the payment, tickets and orderStatus are as shown.

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.

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

NameRequiredDescription
dataYes

TDQS

A4.7/5.0
Behavior5/5

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

Despite annotations already marking the tool read-only, the description adds substantial behavioral context: 404 behavior for missing bookings, test-mode semantics via `livemode`, caveats that ticket capacities are historical snapshots, complimentary-booking semantics, and archived-booking semantics. It also clarifies that mutations must happen in the dashboard, matching the read-only 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 purpose is front-loaded, followed by alternatives, error behavior, field caveats, examples, and mutation limitations in a logical order. The extra detail is dense but warranted for a booking retrieval tool with non-obvious data semantics.

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 annotations, a complete input schema, and an output schema, the description covers the remaining behavioral gaps an agent needs: when to use it, test-mode handling, missing-ID behavior, and misleading field caveats such as historical capacity snapshots. Nothing essential for correct invocation 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 well documented in the input schema. The description reinforces `livemode` test-mode behavior and booking ID discovery via `list_bookings`, but it does not add much parameter-specific detail beyond what the schema already 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?

The description states a specific verb and resource: retrieve a single event booking by ID from a Checkout Page account. It also distinguishes this tool from `list_bookings` and `list_payments`, so an agent can select it confidently among 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 explicitly says to use `list_bookings` first when discovering a booking ID by customer email, name, event title, or order ID, and directs checkout payment lookups to `list_payments`. This gives clear when-to-use and when-to-use-an-alternative guidance.

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.

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

NameRequiredDescription
dataYes

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, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuine behavioral detail beyond that: the exact 404 error string on a missing ID, and the kinds of configuration visible on the page (draft/published/archived status, product, files, images, redirects).

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 core purpose and the guard on ID-based lookup are front-loaded in the first two paragraphs. The four-item example list is a bit padded, but each example maps to a plausibly distinct agent intent rather than restating the same operation.

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-parameter read tool with an output schema, the definition covers purpose, precondition (known ID), sibling routing, and error behavior. Nothing needed to invoke it correctly is missing; return shape is 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.

Parameters4/5

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

Schema coverage is 100% and the pageId property already documents the 24-hex pattern and where to obtain the ID. The description still adds value by tying the ID source to create_checkout_page's returned id and by stating the failure behavior for an unknown ID.

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 ("Retrieve a single checkout page by ID") and scopes it to an account. It is clearly distinguishable from siblings like list_checkout_pages, create_checkout_page, and update_checkout_page.

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 condition for use ("when you already know the checkout page ID and want to inspect the current configuration") and explicitly routes create flows to create_checkout_page, including the post-create lookup pattern. The example utterances reinforce the when-to-use boundary.

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.

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

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.

NameRequiredDescriptionDefault
pageIdYesThe ID of the event page to retrieve.

Output Schema

NameRequiredDescription
dataYes

TDQS

A3.9/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 safety and scope are covered. The description adds workflow sequencing and that the full configuration is returned, but says nothing about authorization requirements, error behavior for a missing/invalid id, or pagination/size, so the added context is modest.

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 with zero waste: the retrieval behavior is front-loaded, then the workflow guidance. Nothing is repeated from the schema or annotations.

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-value detail is unnecessary, and the single required param is fully documented. The only gap is not pointing at list_events as the alternative for enumerating multiple event pages, which would have rounded out the routing context.

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?

Only one parameter, and the schema documents it at 100% coverage including the 24-hex pattern and an example. The description still adds meaning by explaining where the id typically comes from (create_event's returned id), which is not in the schema.

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 and resource — 'Retrieve a single event page and its full configuration by ID' — which also implicitly contrasts with list_events by emphasizing 'single'. It names create_event and update_event, but as workflow partners rather than as alternatives it is being distinguished from, so the sibling differentiation is partial.

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 situational context: use the id returned by create_event for a direct lookup, or call this before a partial update with update_event. It does not say when to prefer list_events instead of a direct fetch, but the when-to-use guidance that is present is concrete.

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.

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

NameRequiredDescription
dataYes

TDQS

A4.3/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 covered. The description still adds real value beyond that: the exact 404 message on a missing ID, and the surface of what can be inspected (status, fields, files, images, redirects). It stops short of describing what the response payload looks like, but an output schema exists to cover that.

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 precondition lead, alternatives follow, and the example list at the end is skimmable rather than buried. The four bullet examples are slightly redundant with the prose but each illustrates a distinct query intent, so little is wasted.

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-parameter read tool with annotations covering safety and an output schema covering the return shape, the description supplies the remaining gaps: precondition, sibling routing, and error behavior. The only omission of note is any rate-limit or pagination nuance, which is negligible here.

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 pageId pattern and provenance are already documented in the schema. The description adds only the 404 consequence of passing an unknown ID and the pointer to use the page `id` returned from create_form — useful but marginal against a fully documented 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?

The first sentence states a specific verb and resource — 'Retrieve a single form by ID from your Checkout Page account' — which unambiguously separates it from list_forms. The scope ('single', 'by ID') and the object ('form') are stated up front with no hedging.

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 precondition ('when you already know the form ID'), names the alternative tool for the other case ('For create flows, use create_form'), and even describes the post-creation lookup path. Both the when-to-use and the sibling routing are spelled out.

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.

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

NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the read-only safety profile; the description goes further, disclosing that responses carry a freshly signed link, that the link expires one hour after the response, that it is safe to share with the buyer, and how to reach test-mode records. That is substantive behavioral context the annotations do not provide.

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 tight sentences, front-loaded with the core action and ending with the sibling routing. The `livemode` sentence mildly duplicates the schema description, but 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?

With only two params, full schema coverage, an output schema, and annotations, the description supplies exactly the missing pieces: link freshness/expiry and sharing safety. Nothing an agent needs to call or interpret this tool 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 `id` and `livemode` are already fully documented. The description's `livemode: false` note and id-discovery hint restate the schema rather than adding syntax or format 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 and resource ("Retrieve a single invoice by id") and immediately contrasts with list_invoices for discovery. An agent can distinguish it from get_payment, get_customer, and list_invoices 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: use `list_invoices` first to discover an id by customer, invoice number, PO number, or chargeId, and names `regenerate_invoice` for rebuilding the PDF. Both the when-to-use and the alternative are stated rather than inferred.

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.

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

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, and the description reinforces that with a named side-effect exclusion (refunds/cancellations). Beyond annotations it adds concrete error behavior (404 "Payment not found" when the ID isn't owned by the authenticated seller) and the livemode test-data toggle. It doesn't describe pagination or response shape, but an output schema exists.

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 routing in the first two paragraphs, then errors, examples, and constraints. The example-uses block and the livemode sentence are mildly redundant given the schema and output schema, but nothing is bloated or buried.

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?

Combines a simple 2-param retrieval, a rich schema, and an output schema, and the description still covers the missing pieces an agent needs: cross-sell to list_payments, bookings exclusion, 404 semantics, and read-only scope. Nothing required 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 both parameters are already fully documented, including the livemode test-mode meaning and the paymentId pattern/'list first' hint. The description's "Pass livemode: false to read test-mode records" mostly restates the schema rather than adding new semantics, 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 and resource ("Retrieve a single payment by ID") and scopes it to the Checkout Page account. It also explicitly separates itself from list_payments and from event bookings, so an agent can distinguish it from the many get_* siblings 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?

Gives explicit when-to-use routing: "Use list_payments first if you need to discover a payment ID by customer email, customer name, product title, or order ID," and redirects event bookings to list_bookings. It also names what can't be done here (refunds/cancellations) and points to 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.

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

Output 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 readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by enumerating the product data included and clarifying the ID provenance, though it does not describe not-found behavior or auth requirements.

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 concise sentences with no waste: the retrieval scope and returned fields come first, followed by the ID provenance note. It is appropriately sized and front-loaded.

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 single-resource read tool with full schema coverage, clear annotations, and an output schema, the description provides everything needed to understand scope and invocation. Return-value details are rightly 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%, and the single productId parameter is fully documented in the schema with its pattern and source. The description reinforces the ID source but does not add format or semantic details beyond what the schema already provides, 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?

The description states a specific verb and resource: "Retrieve a single product by ID," and lists the data returned (prices, variants, stock, tax, file settings). This clearly distinguishes it from siblings like list_products and update_product 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 Guidelines3/5

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

The description implies when to use the tool by saying it retrieves a single product by ID, and it explains where to find that ID via get_checkout_page. However, it does not explicitly compare against alternatives such as list_products or state when not to use it, leaving guidance at an implied level.

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.

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

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 readOnlyHint=true, destructiveHint=false, and openWorldHint=false, yet the description still adds real behavior: the 404 "Submission not found" outcome, the absence of pagination, and the livemode/test-mode switch semantics. It also confirms the write boundary and points to the dashboard as the alternative, which prevents an agent from attempting unsupported edits.

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 scope, followed by the routing rule and the read-only boundary. The four example utterances are somewhat redundant given the usage paragraph, but they are short and help match colloquial user requests. Slight over-length keeps it off a 5.

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 needn't be spelled out, and the description correctly focuses on scope, error behavior, and the read-only constraint. Nothing an agent needs to call this correctly – ID format expectations, test vs live selection, missing-record behavior – 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 coverage is 100% – both `submissionId` (with its 24-hex pattern and list-first hint) and `livemode` are fully documented in the schema. The description restates the livemode test-mode behavior and the list-first advice, which reinforces rather than adds new semantics. Baseline 3 is correct where the schema already carries the load.

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") plus the account scope ("your Checkout Page account"). It also names the sibling `list_submissions` and clearly delineates that this tool is the ID-based single-record fetch, 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 Guidelines5/5

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

Explicitly tells the agent to call `list_submissions` first to discover an ID by email, name, page, customer ID, or date range. It also gives the when-not path: modification requests cannot be done here and must be handled in the Checkout Page dashboard.

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.

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

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, but the description adds the 404 'Subscription not found' behavior when the ID doesn't belong to the authenticated seller, plus the livemode test-vs-live data scoping. The read-only restatement is redundant with the annotation and the tool doesn't mention pagination or response size, so it stops 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, then guidance, then error behavior, then a short example block — easy to scan. Minor waste: 'This tool is read-only' restates the annotation and the hint to use list_subscriptions appears both in prose and in the parameter 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?

For a 2-parameter read tool with an output schema, the description covers the lookup pattern, the test/live mode switch, the failure mode, and the adjacent tools for discovery and cancellation. 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 coverage is 100% and both parameters are documented in the schema, including the ID pattern and the livemode default. The description only reinforces the list_subscriptions discovery path, adding little beyond what the schema already says, 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?

Opens with a specific verb+resource+scope: 'Retrieve a single subscription by ID from your Checkout Page account.' This immediately distinguishes it from the sibling list_subscriptions and from get_subscription_payment or prepare_subscription_cancellation.

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 by email/name/product/order, and use prepare_subscription_cancellation for cancellation context. It also names the out-of-scope operations (cancellation, refunds) that must be done in the dashboard, which is a genuine when-not rule.

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.

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

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.

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

Output 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.

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

Output 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 readOnlyHint and destructiveHint=false, so the closing "Read-only." is redundant. However, the description adds genuinely new behavior with annotations absent: the signing secret is never returned, custom header values are redacted as `[hidden]`, and headers must be managed via the returned `dashboardUrl`. That redaction disclosure is the kind of thing an agent cannot infer from structured fields.

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 the redaction caveat, then the sibling pointer. Nothing padding; even the somewhat redundant "Read-only" is a single clause.

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 an output schema present, the description needn't enumerate return values, and it correctly focuses on the surprises an agent would hit (hidden secret, masked headers). What's missing is minor: error behavior for a not-found or malformed id, and confirmation of what `status` values mean.

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 parameter already documents the 24-hex format and its origin. The description only restates the id concept and cross-references list_webhooks, so it adds little parameter-level meaning beyond the schema. 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?

Specific verb and resource ("Fetch one webhook by id") immediately followed by the fields returned (URL, subscribed events, status, delivery counters). It is clearly distinguished from the sibling list_webhooks, and even from update_webhook by noting that editing happens elsewhere.

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: "Use list_webhooks to find the id." That is enough for an agent to route correctly between single-fetch and list. It stops short of stating when *not* to call it (e.g., bulk inspection, or which sibling to use for secret rotation), so it is not a full 5.

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'

  • "Show me archived bookings" → filter by archived: '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). Archiving is the separate archivedAt field. 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.

  • archivedAt is independent of all three: the merchant hid the booking from their default bookings list in the dashboard. Archiving changes nothing else, so an archived booking can still be a valid registration. The list includes archived bookings unless you filter with archived: 'false'.

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.

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.
archivedNoFilter by archived bookings. `true` returns only archived bookings, `false` excludes them. Without it the list includes both.
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: 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

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 readOnlyHint=true, openWorldHint=false, and destructiveHint=false, and the description adds substantial complementary context: it explicitly says the tool is read-only and cannot modify, transfer, cancel, or refund. It also discloses data limitations around refund history, email delivery, cancellations, address fields, and inventory snapshots.

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 description is well structured and front-loaded, with clear headings and practical examples. However, it is extremely long for a single tool definition, and some passages could be tightened without losing needed 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 the tool's 16 optional filters, multiple status fields, pagination, and many support-question edge cases, the description is complete enough for an agent to invoke it correctly. An output schema exists, so the description does not need to explain return values, but it still adds useful interpretation guidance for key fields.

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 important semantic guidance beyond the schema. It explains the independence of status, orderStatus, isComplimentary, and archivedAt; the meaning of date filters in UTC; cursor pagination behavior; and practical limit choices.

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 states a specific verb and resource: retrieve a paginated list of event bookings from a Checkout Page account. It also distinguishes the record set from payments and subscriptions later in the description, so an agent can tell what this tool is and is not.

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 gives extensive when-to-use guidance with concrete support examples, filter recommendations, and explicit alternatives. It routes order lookups to list_payments/list_subscriptions when needed and directs full customer history across all three transaction tools.

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.

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

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 description only needs to add context, which it does: newest-first ordering, full configuration included in results, and archived pages omitted by default. It stops short of describing pagination semantics or result shape, but the output schema and annotations cover those.

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 sentences, each carrying a distinct purpose: scope, archived default, ID-finding role, and sibling routing. Front-loaded with the core action and no wasted clauses.

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 annotations covering safety, an output schema covering return values, and 100% schema coverage for parameters, the description fills its remaining role: ordering, default filtering behavior, and sibling disambiguation. 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%, so all six parameters are already documented with enums, defaults and cursor constraints. The description reinforces the status/archived default but adds no syntax or format detail beyond what the schema provides, making the baseline 3 correct.

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'), plus scope ('newest first, each with its full configuration, product and fields'). It explicitly names what it is not (forms and events are separate page types) and distinguishes itself from get_checkout_page/update_checkout_page.

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: use this to find a page id for get_checkout_page and update_checkout_page, and use list_forms/list_events for the other page types. It also explains the default status behavior (archived excluded unless filtered), which is exactly the condition an agent needs to decide whether to pass status.

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: rules lists where the coupon works and what it discounts, one { pageId, appliesTo, priceIds, ticketTypeIds, bumpProductIds } per rule; with none it discounts the whole order on every checkout page and event. appliesTo is wholeOrder, prices (only the picked prices), pricesAndBumps (only when a picked price AND a picked bump are bought, discounting both), tickets (only the picked tickets) or ticketsAndAddOns (only when a picked ticket AND a picked add-on are bought). An empty priceIds, ticketTypeIds or bumpProductIds means every price, ticket type, bump or add-on on the page. Rules on the same page are combined with OR. pageIds and ticketTypeIds are deprecated and derived from the rules. These are IDs only: this tool does not resolve them to page, event, product or price 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.

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

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?

Beyond the readOnlyHint/destructiveHint annotations, it discloses that soft-deleted coupons are returned, that there is no single 'active' flag (deleted/redeemBy/maxRedemptions must be combined), that results are newest-first, that discount fields are immutable after creation, and that there are no server-side filters beyond search. This is substantially more than the annotations carry.

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 description is front-loaded and well-sectioned with bold headers, and nearly every sentence is substantive. However, the 'Reading a coupon' and 'Scoping' sections explain return-value fields in depth even though an output schema exists, which is more length than the tool strictly requires. Dense and organized, but longer than 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?

For a 4-parameter, read-only list tool with full schema coverage and an output schema, the description covers purpose, alternatives, filtering limits, pagination, and the semantics an agent needs to interpret results correctly. Nothing material is left to inference.

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; the description adds value by explaining that `search` is a contains match on both label and code and is meant for duplicate detection, and by establishing newest-first ordering that gives the cursor parameters meaning. Some of the parameter detail (mutual exclusivity, limit max) repeats the schema, capping it below 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?

The first sentence names a specific verb (Retrieve) and resource (paginated list of discount coupons) and scopes it to the Checkout Page account. It explicitly differentiates from siblings by naming create_coupon and update_coupon and describing its role relative to them. An agent can identify this tool 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?

It states the tool is 'the only way to discover a coupon ID' and routes the agent to update_coupon for changes and create_coupon for additions. The `search` guidance ties a concrete when-to-use case (duplicate check before create) to the parameter, and the 'No filters beyond search' section clarifies the limits of alternatives. Explicit 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.

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.

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

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.

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

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
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description still adds real behavior: default ordering (newest first), default exclusion of archived events unless status is passed, and the fact that full event config/ticket groups are returned. It does not mention pagination limits or response size, so it falls 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.

Conciseness5/5

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

Three sentences, each carrying unique information: what is listed, the archived default, and the id-lookup/alternative routing. Front-loaded with the primary purpose and zero 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 the description needn't enumerate return fields; it still summarizes that records include configuration, event details, ticket groups, ticket types and fields. Combined with the archived-default and pagination-adjacent guidance, nothing essential is missing for correct invocation.

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; the description adds meaning beyond the schema by clarifying that archived events are hidden unless you filter by status, which reinforces the status parameter's effect. It does not touch search, testmode or cursor params, but the schema documents those well, so a 4 is fair.

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 included, archived excluded. It explicitly distinguishes the resource from sibling page types ('Checkout pages and forms are separate page types'), so an agent can tell it apart from list_checkout_pages and list_forms 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 concrete when-to-use routing: 'this is how to find an event id for get_event, update_event, list_bookings and list_tickets.' It also names the two alternatives it is not (list_checkout_pages, list_forms), 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.

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.

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

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 and destructiveHint=false, so the description does not need to argue safety, and it correctly adds ordering ('newest first'), default exclusion of archived forms, and fullness of returned payloads. It stops short of covering page-size defaults or cursor iteration behavior, but the schema carries those.

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 dense sentences, front-loaded with what the tool returns, then the archived caveat, then the sibling routing. Nothing is repeated and nothing 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?

An output schema exists, so return-value detail is not required, yet the description still signals that each record carries full configuration, fields and files. Combined with sibling routing and the archived default, an agent has everything needed to call it correctly on the first attempt.

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 six parameters are already fully documented, including the status default and the ending_before/starting_after mutual exclusion. The description only restates the archived/status rule already present in the schema, adding no syntax or semantics 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 ('List the form pages on the Checkout Page account') plus scope details (newest first, full configuration, fields and files). It also explicitly separates itself from list_checkout_pages and list_events, so an agent can distinguish it from the nearest siblings without reading 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?

Gives concrete when-to-use routing: 'this is how to find a form id for get_form, update_form and list_submissions', and names the alternative tools for the other page types. It also warns that archived forms are hidden unless status is passed, which is a usage condition, not just a field description.

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.

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

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

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, but the description adds genuinely useful behavior: the invoiceUrl is a signed hosted-PDF link, safe to share with the buyer, and expires 1 hour after the response. That expiry/shareability detail is exactly the kind of context an agent cannot get from the structured fields, though pagination/limit behavior is left to 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.

Conciseness5/5

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

Four sentences, each carrying distinct information: scope, mode selection, a non-obvious return-value trait, and sibling routing. Purpose is front-loaded and there is no filler or repetition.

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 shapes, and it covers everything else an agent needs: what the tool lists, how to reach test data, what the returned URL means, and which sibling tools round out the picture. No material gap for an 11-parameter 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 all 11 parameters (including the nuanced search routing and status enum) are already documented in the schema. The description restates the livemode:false guidance but adds no parameter semantics beyond what the schema provides, making the baseline 3 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 invoices generated from payments (Charges) on the Checkout Page account'), which pins down both the entity and its origin. It implicitly distinguishes itself from get_invoice (single lookup) and list_payments by naming those siblings as complementary sources for full purchase history.

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 routing guidance: pass livemode:false for test records, and query list_payments/list_subscriptions/list_subscription_payments/list_bookings for complete purchase history. It stops short of an explicit when-not rule (e.g. 'use get_invoice when you already have an invoice ID'), so it's clear context rather than a full decision matrix.

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

list_order_bumpsA
Read-only
Inspect

List the order bumps on a checkout page or event (shown as add-ons on events) in display order, with how each is offered and any reason it cannot be offered right now. Read-only.

NameRequiredDescriptionDefault
pageIdYesThe ID of the checkout page or event. Use the type you fetched it with (get_checkout_page or get_event).
pageTypeYesThe kind of page the order bump is on: `checkout` for a checkout page, `event` for an event (where order bumps are shown as add-ons).

Output 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 readOnlyHint=true, openWorldHint=false, and destructiveHint=false, and the description is consistent with that by stating "Read-only." It adds useful behavioral detail by saying results include display order, how each bump is offered, and any reason it cannot be offered right now.

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 two short sentences with no wasted wording. The core listing behavior and scope are front-loaded, followed by the concise "Read-only" safety cue.

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 rich annotations, 100% schema description coverage, and presence of an output schema, the description supplies enough context for an agent to call this tool correctly. It covers purpose, scope, ordering behavior, and the read-only nature without needing to explain return fields already covered by 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 both pageId and pageType are already well documented in the schema. The description reinforces that the listing applies to a checkout page or event and that events show order bumps as add-ons, but it does not add format or constraint details 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?

The description uses a specific verb and resource ("List the order bumps"), scopes it to a checkout page or event, and adds that results are in display order. It clearly distinguishes this read operation from sibling mutation tools such as create_order_bump, update_order_bump, and reorder_order_bumps.

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 makes the context clear (listing order bumps on a checkout page or event) and notes that it is read-only. However, it does not explicitly state when to use this versus get_checkout_page, get_event, or reorder_order_bumps, leaving usage to be inferred.

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: canceledReason is only set when a cancellation is performed from the Checkout Page dashboard (canceledBy is set) or through the API (canceledByApiKey is set). 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.

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: 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

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 only declare readOnly/non-destructive; the description adds substantial non-obvious behavior: newest-first sort, cursor pagination exclusivity, max/default limit, minor-currency-unit money handling, refund metadata being overwritten, the pre-2026-01-22 historical refund gap, paymentError persisting after retry, and non-overlapping record sets across tools. No contradiction with the readOnlyHint — it explicitly reinforces it.

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 with headers, which helps, but it is far longer than needed and visibly redundant: the download/delivery limitation and the invoice/resend limitation are each stated twice (example list and 'Data limitations'), and the 0-results → list_bookings/list_subscriptions routing appears three times. A large share of tokens repeat content already delivered.

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, paginated, read-only list tool with an output schema, the description covers everything an agent needs: filter semantics, paging, currency/name-field interpretation, known data gaps, and cross-tool routing. The output schema relieves it of return-shape duty, and it still calls out the fields that matter for support answers.

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%, but the description still adds meaning the schema cannot: only one status per call so refunded vs partial_refund need separate queries, that an unfiltered total counts failed/draft records, UTC-Z requirement for date filters, limit guidance per task type, and which fields `search` matches when combined with customer profile 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 payments processed through your Checkout Page account') and immediately scopes it against sibling tools ('For questions about a customer's full purchase history query the other transaction tools'). An agent can distinguish list_payments from get_payment and list_bookings 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?

Gives explicit when-to-use routing across many concrete scenarios (order lookup, double-charge, refund, abandoned cart, count questions) and names the alternatives with their selection conditions ('If order lookup returns 0 results, try list_bookings / list_subscriptions'). Also states exclusions ('this tool is read-only... use the dashboard').

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

list_productsA
Read-only
Inspect

Retrieve a paginated list of your products, newest first. Filter with role: orderbump to find the products you can offer as order bumps with create_order_bump; page products are also reachable from their page. Read-only.

NameRequiredDescriptionDefault
roleNoOnly return products with this role. `orderbump` lists the products you can add to a page as order bumps; `product` lists page products. Omit for both.
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive contains match against the product title and SKU.
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

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 the description is consistent ('Read-only'). Beyond annotations it adds real behavior: ordering (newest first) and pagination with cursors. It doesn't state default page size or what the response looks like, but the output schema covers the latter.

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, front-loaded with purpose, then the filtering/alternative hint. No filler; the 'Read-only' tag is the only near-redundancy with 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?

With 100% schema coverage, a full output schema, and annotations covering safety, the description supplies order, scope, and the one non-obvious cross-tool relationship. Nothing an agent needs to select or invoke it 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. The description adds value beyond the schema by tying `role: orderbump` to create_order_bump and noting page products are reachable from their page — a cross-parameter relationship the schema doesn't express.

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 gives a specific verb and resource ('Retrieve a paginated list of your products') plus ordering ('newest first'), which immediately separates it from get_product (single) and list_order_bumps (a different resource listing). An agent can identify the tool's function 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 explicitly routes one use case: filter with `role: orderbump` to find products offerable via create_order_bump. That is concrete when-to-use guidance with a named sibling. It doesn't cover other alternatives (get_product, list_order_bumps) or the `product` role case in the description, 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.

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.

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.
orderStatusNoFilter by lifecycle status. Valid values: active, canceled. Without this filter, canceled submissions are included, as in the payments and bookings lists.
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

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
Behavior5/5

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

Beyond the readOnly/destructive annotations it adds real operational context: no MCP tool can edit or delete submissions, records omit downstream fulfillment and email delivery status, results are newest-first, cursors are exclusive, and the dashboard is the fallback for write actions.

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?

Purpose and data limitations are front-loaded, but the read-only/no-edit statement is repeated three times (mid-paragraph, under Data limitations, and the bolded closing paragraph), and the long example-use lists partially duplicate the support-use bullets.

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 an 11-filter list tool with an output schema, everything an agent needs is present: filter semantics, timezone rules, pagination behavior, ordering, and explicit boundaries on what the data does and does not contain.

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 most parameter guidance in the description (UTC Z-suffix dates, starting_after/ending_before mutual exclusion, max limit 100, default 10, livemode: false for test data) restates what the schema already documents. Baseline 3 applies; the description adds little parameter-level meaning 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?

Specific verb and resource: 'Retrieve a paginated list of form submissions processed through your Checkout Page account.' It distinguishes itself from get_submission by naming that sibling as the follow-up for a single record's full payload.

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 concrete query examples ('Find submissions from jane@example.com', 'Show failed submissions') and explicit routing rules: use pageId when the page ID is known, search with the form title otherwise, and call get_submission when the full payload for one result is needed.

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.

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

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.

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

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?

Beyond the annotations (readOnlyHint, destructiveHint false, openWorldHint false), it discloses real behavioral traits: default live vs test-mode records, UTC-only date handling, newest-first ordering, max/default limits, cursor exclusivity, a historical refund-data gap before 2026-04-09, and the absence of email delivery and access/entitlement data. That is unusually rich disclosure for a read-only list tool.

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

Conciseness2/5

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

The opening sentence and cross-tool routing are well front-loaded, but the body is roughly a thousand words of support playbooks that mostly help interpret results rather than invoke the tool. Status semantics (past_due still active) are restated three times, the MRR bullet is filler, and the useful routing facts are buried under repeated examples.

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 12 optional filters, enum-heavy status handling, and the fact that an output schema exists, the description covers everything an agent needs: selection criteria, pagination contract, permission boundaries, data-availability caveats, and cross-tool fallbacks when a lookup returns zero results.

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 exceeds it by explaining semantics the schema does not: past_due being counted as still active, search's contains-match fields, livemode false meaning test-mode, and UTC Z-suffix formatting. A few parameters (customerId, createdBefore, abandonmentStatus) get nothing beyond the schema, and 'recovered' is never defined, which keeps it short of 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 and resource ('Retrieve a paginated list of subscriptions') plus the account scope (Checkout Page), and the cross-tool routing section makes clear how this differs from list_payments, list_bookings, and list_customers. An agent can select it correctly 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?

The description gives explicit when-to-use guidance through worked example queries ('Find the subscription for order ORD-9182' → orderId; 'Jane Smith' → search), names alternatives such as list_subscription_payments for per-charge history, and states what the tool cannot do (cancel, refund, pause). Alternatives and exclusions are both present.

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.

NameRequiredDescriptionDefault

No parameters

Output 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, heading, 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. Before writing customCss, list the customCss group: its note names the class names on the page and how to write CSS that works there.

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

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. When `customCss` is listed, it also says which class names custom CSS can select and how to write it.
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.8/5.0
Behavior5/5

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

Annotations only cover the read-only/idempotent safety profile; the description adds substantial behavior: a fixed list of ~800 properties, a 40-result cap with `total` and `note` in the response, the all-words-then-any-words fallback ordering, server-side rejection of `;{}<>`, the fact that invalid colors are stored and silently ignored by the browser, plan gating for `customCss` and the Powered-by badges, and that `null` resets work on any plan.

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 front-loaded with purpose then narrowing strategy, and the value-format bullets and path map are well organized and decision-relevant. It is long (~500 words) and contains at least one passage — the every-word/any-word/40-match/`total`/`note` sentence — that restates the `search` schema description, which is the main trimming opportunity.

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-optional-parameter read tool with an output schema, the description covers everything an agent needs: what it returns conceptually, how to narrow, how to interpret the response's match metadata, the exact `themeOverrides` nesting example, and the reset and plan constraints. Nothing material is left to inference.

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; the description goes beyond it by mapping `prefix` paths to page regions (`elements.product.*`, `elements.checkout.form.*`) and flagging which groups are small enough to read whole. However, the search fallback/40-match/total/note wording is repeated almost verbatim from the schema's `search` description, so part of the added text is duplication rather than new meaning.

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 names a specific verb and resource — 'List the design and label properties a checkout page, event or form can override' — and adds the return content (value format and allowed values). It is clearly a read-only catalog lookup, distinct from the theme CRUD siblings (list_themes, get_theme, update_theme), and it names the write tools (create_checkout_page, update_form, etc.) where the values are consumed.

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 states explicitly when not to read the whole thing ('the whole list, or the whole `elements` group, is too long to read at once') and which narrowing knob to use, including which groups are small enough to list whole (tokens, layout, labels). It also gives a sequencing rule for the deepest case: 'Before writing `customCss`, list the `customCss` group.'

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.

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

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.

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

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?

With readOnlyHint and destructiveHint=false already declaring the safety profile, the description still adds useful behavior: one ticket per attendee so a booking yields multiple records, the opaque checkInCode credential for QR rendering, and the livemode scoping rule. It does not discuss pagination or result ordering, which is a minor gap.

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 the resource definition before use cases, the checkInCode caveat, and the sibling pointer. Dense but each sentence carries information; the checkInCode sentence is slightly specialist but relevant to correct invocation.

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 14-parameter read-only list tool with full schema coverage and an output schema, the description covers everything an agent needs: what a record is, test mode, the QR credential field, and when to switch to list_bookings. Return-value detail is properly 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 coverage is 100%, so the baseline is 3; the description earns above that by explaining what a record represents per parameter family (one ticket per attendee, bookingId to go from a booking to its tickets, livemode false for test records) and by warning to review all matches for a multi-attendee booking.

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 ("List individual attendee tickets from paid event bookings") plus the unit of record (one per attendee) and what each record carries (check-in history, revenue allocation). It explicitly separates itself from list_bookings by naming that sibling and the bookingId link.

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 concrete use cases (guest lists, door and check-in questions, locating a named attendee) and an explicit alternative with a condition: use list_bookings for the order or payment behind the tickets. Test-mode guidance via livemode: false is also stated up front.

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.

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

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

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered and the description adds real value: the signing secret is never returned, custom header values appear as `[hidden]`, and headers must be viewed/edited via the returned `dashboardUrl`. It loses a point for restating 'Read-only' and repeating 'newest first' twice instead of spending those words on anything new (e.g. whether delivery counters are cumulative or windowed).

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 valuable content (redaction behavior, id-discovery routing, header editing location) is front-loaded and dense. There is avoidable redundancy: 'newest first' appears in both the first sentence and a later standalone sentence, and the pagination/limit sentence duplicates the schema descriptions.

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-shape explanation is rightly omitted, and the description still covers ordering, redaction, pagination, and routing to siblings. Minor gaps remain, such as whether status filtering defaults to active-only or all webhooks, which matters when checking for an existing registration.

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 the `event` enum, `status` enum, `limit` bounds, and both cursor parameters already documented in the schema. The description adds almost nothing beyond it: the mutual exclusivity of `starting_after`/`ending_before` and the max/default `limit` are verbatim in the schema. Baseline 3 applies 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 ('List the webhook endpoints registered on this Checkout Page account') and adds scope detail: returned fields (subscribed events, status, delivery counters), ordering, and the redaction rules. It also explicitly positions itself against siblings get_webhook, delete_webhook, and create_webhook, so an agent can pick the right tool 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?

It names the concrete triggering scenarios: find a webhook `id` for `get_webhook`/`delete_webhook`, and check whether a URL is already registered before `create_webhook`. That is explicit when-to-use plus named alternatives, not mere implication.

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?"

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

NameRequiredDescription
dataYes
guidanceYes

TDQS

A4.6/5.0
Behavior5/5

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

Fully consistent with readOnlyHint=true and destructiveHint=false, and it adds substantive context annotations cannot express: the actual mutation happens outside the API in the Checkout Page dashboard, the tool returns a side-effects narrative, and fixed-term plans (`planIterations > 0`) only allow `immediately`. That is real behavioral disclosure, not restatement.

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 most important fact in bold, then structures returns, alternatives, and examples in scannable blocks. It is somewhat long, and the enumerated return-value list plus three examples overlap with the existing output schema and could be trimmed without losing 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?

For a single-parameter read tool with an output schema, the definition covers everything an agent needs: the surprising non-mutating semantics, eligibility rules, timing option constraints, and where cancellation actually occurs. No gaps remain that would cause a misinvocation or a wrong expectation.

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%, with the schema description already carrying the key caveat about non-cancellation. The description adds essentially nothing about the `subscriptionId` beyond that (format, where to source it is handled by the `list_subscriptions` pointer, which is usage rather than parameter semantics). Baseline 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?

Opens with an explicit negation of what the name implies ("This tool does not cancel the subscription") and then states precisely what it does: fetch, evaluate eligibility and side effects, return a dashboard URL. It also names the two sibling tools it is not (`get_subscription`, `list_subscriptions`), so an agent can disambiguate 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?

Gives explicit routing: use `list_subscriptions` first to obtain an ID, or `get_subscription` if the cancellation guidance overlay is unnecessary. Three concrete example utterances map real user intents onto the tool, leaving little to infer about when this is the right call.

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.

NameRequiredDescriptionDefault
idYesThe ID of the invoice to regenerate.

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark this as destructive and non-read-only, but the description adds substantial context: it overwrites billing details and PO numbers, fills missing customer fields only when absent, replaces the existing hosted PDF without keeping the prior version, preserves line items/amounts/taxes/status, and returns a fresh signed URL.

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 front-loads the core action and then details destructive effects in a logical order. Every sentence adds relevant information, and there is no filler or repetition.

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 annotations covering safety semantics and an output schema covering return structure, the description fills the remaining gap by explaining exactly what data is overwritten, what is preserved, and what happens to the previous PDF. It is complete for this operation.

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?

There is one required parameter, id, and schema coverage is 100%. The description says 'by id' but adds no format, source, or lookup semantics beyond what the schema already provides, so the baseline of 3 for high schema coverage 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?

The description names a specific verb and resource: 'Regenerate the PDF for an invoice by id.' It clearly distinguishes the operation from read-only siblings like get_invoice and list_invoices by describing the regeneration and overwrite behavior.

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 implies when the tool is useful, namely when an invoice's stored billing details or hosted PDF need refreshing from current payment/customer data. However, it does not explicitly state when to choose this over alternatives such as updating an invoice or fetching it, so usage is only implied.

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

reorder_order_bumpsAInspect

Set the display order of the order bumps on a checkout page or event. Send every order bump product ID on the page exactly once (read them with list_order_bumps). Returns the reordered list. Mutating.

NameRequiredDescriptionDefault
pageIdYesThe ID of the checkout page or event. Use the type you fetched it with (get_checkout_page or get_event).
pageTypeYesThe kind of page the order bump is on: `checkout` for a checkout page, `event` for an event (where order bumps are shown as add-ons).
productIdsYesEvery order bump product ID on the page, each exactly once, in the order to show them.

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, but the description adds a crucial behavioral fact not in the annotations: this is a full-replacement operation requiring the complete ID set exactly once, which is an easy way to lose ordering or drop bumps. It also discloses the return value ('Returns the reordered list') and points at list_order_bumps as the read path. Remaining gaps are minor (no permissions or partial-list error behavior).

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 with no filler, and the core action is front-loaded before the operational constraint and the sibling pointer. Nothing needs trimming.

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 explaining return values is unnecessary and the single clause 'Returns the reordered list' is sufficient. With 100% schema coverage, one enum parameter and annotations covering the mutation profile, the description covers everything an agent needs to 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% and the productIds field already spells out 'each exactly once, in the order to show them', so the description's 'Send every order bump product ID on the page exactly once' largely restates the schema. It reinforces the completeness constraint but adds no syntax or format meaning beyond what is structured.

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 ('Set the display order of the order bumps') and scopes it to a checkout page or event, which distinguishes it from create_order_bump, update_order_bump and list_order_bumps in the sibling list. An agent can tell immediately that this is a bulk ordering operation rather than a per-bump edit.

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 operational prerequisite: send every order bump product ID on the page exactly once, and read them first with list_order_bumps. The page type variants (checkout vs event) are covered in the schema. What's missing is an explicit 'when not to use' pointer to update_order_bump for single-bump changes, 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.

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.

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.
formLayoutNoReplaces how the page's form is arranged, top to bottom. Reference fields by `fieldId`, the ids in the page's `fields`; an id that is not on the page is rejected. Send the whole layout: read the current one from `formLayout` on the page, change it and send it back. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.
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
coverProcessingFeesNoOptions that let customers choose to cover the processing fee. The list holds at most one option for now. Sending it replaces the whole list.
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. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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 plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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

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 openWorldHint=true. The description reinforces this with 'customers see it right away' and 'there is no undo, because the previous values are not kept' — meaningful confirmation of the destructive profile beyond the annotation. It also discloses that changing themeId replaces the page's own theme settings. Minor gaps remain (auth/permissions), but the behavioral picture is strong and consistent with 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 purpose and the partial-update precondition, then scoping, then destructive warning, then theme guidance. Each sentence carries information, though it runs several compact clauses long. No filler, but dense.

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 57-parameter mutation tool with an output schema (so return values need no explanation), the description covers the high-risk ambiguities: partial-update workflow, destructive immediacy, cross-resource routing, and theme replacement semantics. A few specialized sub-objects (fees, payment options, funnel steps) rely on their own schema descriptions, which is acceptable at 72% coverage.

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 72%, so the schema already documents most fields. The description adds genuine value on the trickiest params: it explains that themeOverrides carries design and labels including translations, that hostedLayoutType relates to layout, and that themeId replaces existing theme settings requiring themeOverrides to be resent. This is more than the schema alone conveys for these nested/opaque fields.

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 this from create_checkout_page, get_checkout_page, and update_product 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 directs the agent to read current values with get_checkout_page before a partial update, routes product settings to update_product, routes custom fields to create_field/update_field/delete_field, and routes theme work to list_theme_properties and list_themes. Coverage of when-to-use-each-alternative is unusually thorough.

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. rules is replaced wholesale rather than merged - send every rule you want, or an empty array to make the coupon work everywhere.

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.

How scoping works:

  • rules lists where the coupon works and what it discounts: [{ pageId, appliesTo, priceIds, ticketTypeIds, bumpProductIds }]. Omit it (or send an empty list) for a coupon that discounts the whole order on every checkout page and event.

  • A coupon works on any page a rule names. Several rules on one page are combined with OR. An event can't mix tickets and ticketsAndAddOns rules.

  • Checkout pages: wholeOrder (the main product at any price and every order bump), prices (applies when the customer buys one of priceIds, discounting that price only), pricesAndBumps (applies only when the customer buys one of priceIds AND one of bumpProductIds, discounting both).

  • Events: wholeOrder (every ticket and add-on), tickets (applies when the customer buys one of ticketTypeIds, discounting those tickets only), ticketsAndAddOns (applies only when the customer buys one of ticketTypeIds AND one of bumpProductIds, discounting both).

  • priceIds are the ids of the page's main product's prices (from get_product), not Stripe price ids. bumpProductIds are products of order bumps or add-ons on that page. Leave priceIds, ticketTypeIds or bumpProductIds empty for every price, ticket type, bump or add-on on the page, including ones added later. A page with no bumps or add-ons cannot use pricesAndBumps or ticketsAndAddOns.

  • When no rule matches the order, the code is accepted but discounts nothing. Setup fees and ticket fees join with appliesToSetupFee and appliesToTicketFees.

  • pageIds and ticketTypeIds are deprecated: use rules. They are still accepted without rules (each page whole order, or tickets on an event with picked ticket types).

  • Without rules, pageIds replaces the rules with whole-order rules for those pages (an empty list makes the coupon work everywhere), and ticketTypeIds sent without pageIds must belong to the coupon's pages. A coupon whose rules go beyond one wholeOrder rule, or one tickets rule with picked ticketTypeIds, per page refuses pageIds and ticketTypeIds with a 400: send rules instead.

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.

NameRequiredDescriptionDefault
labelNoInternal name for the coupon.
rulesNoWhere the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event. Replaces every stored rule; an empty list makes the coupon work everywhere.
deletedNoSet true to soft delete the coupon. It stops working at checkout but its data and redemption history are retained.
pageIdsNoDeprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`. Replaces the stored rules with whole-order rules for these pages; an empty array makes the coupon work everywhere. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` rule, or one `tickets` rule with picked `ticketTypeIds`, per page: send `rules` instead.
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.
ticketTypeIdsNoDeprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`. Without `pageIds`, checked against the pages already on the coupon. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` rule, or one `tickets` rule with picked `ticketTypeIds`, per page.
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

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 destructiveHint=true, but the description adds the specifics that matter: every change hits live checkouts immediately, there is no undo because previous values are not retained, `deleted: true` stops redemption instantly while retaining history, and `rules` is replaced wholesale rather than merged. Those are exactly the traits an agent needs before invoking 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.

Conciseness4/5

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

Front-loaded with the mutation contract and immutability, then organized under bold headers (what cannot be changed, how scoping works, live-data warning). It runs long and the scoping bullets restate material already present in the `appliesTo` schema description, which is the main cost.

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 destructive, 8-parameter mutation with nested rule objects, the description covers everything an agent needs: partial-update contract, null semantics, immutable fields, legacy-coupon failure mode, deprecated-parameter interaction, and irreversibility. Return values are covered by the output schema, so 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; the description still adds value by explaining the replace-not-merge contract for `rules`, the empty-list meaning, OR combination across rules on one page, the prohibition on mixing `tickets` and `ticketsAndAddOns`, and how `pageIds` rewrites stored rules. It does overlap substantially with the schema's own rule/appliesTo descriptions, so it is not entirely additive.

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 coupon in your Checkout Page account") and immediately distinguishes itself from create_coupon by naming the exact fields that are immutable and directing discount changes to soft-delete + create_coupon. An agent can place this tool relative to its siblings 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 rules: partial update semantics for supplied fields, use `null` to remove limits, replace the coupon instead when the discount must change, and legacy coupons created before 2025-10-04 cannot be updated (400). It also tells the agent to prefer `rules` over the deprecated `pageIds`/`ticketTypeIds` and explains the 400 refusal condition that forces that choice.

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.

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

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, ticket groups with create_ticket_group, update_ticket_group and archive_ticket_group, 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.

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.
formLayoutNoReplaces how the page's form is arranged, top to bottom. Reference fields by `fieldId`, the ids in the page's `fields`; an id that is not on the page is rejected. Send the whole layout: read the current one from `formLayout` on the page, change it and send it back. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.
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
coverProcessingFeesNoOptions that let customers choose to cover the processing fee. The list holds at most one option for now. Sending it replaces the whole list.
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. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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 plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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

NameRequiredDescription
dataYes

TDQS

A4.3/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, but the description adds the concrete consequence: the change goes live immediately, customers see it at once, and there is no undo because previous values are not retained. It also warns that setting themeId wipes the page's own theme settings and translations unless themeOverrides is sent in the same request. It stops short of covering status/archived transitions or testmode's effect on this call.

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 the read-before-write rule, then the destructive warning, then sub-resource routing and theme guidance — a sensible ordering for a large mutation tool. Slightly heavy on theme paragraph length and partly restates what themeId's schema description already says.

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 no explanation, and the description covers the two things an agent most needs before a destructive live-page write: read current state first, and there is no rollback. Gaps remain around partial-update semantics for omitted vs null fields and around status/visibility changes, but overall it is sufficient to call the 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?

With 60 parameters and only 55% schema description coverage, the description carries a meaningful burden but only addresses the theme family (themeId, themeOverrides, hostedLayoutType); dozens of fields such as status, testmode, funnelSteps and eventDetails are left entirely to the schema. Baseline 3 is appropriate since the schema itself is richly documented where it does describe fields.

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: 'Update an existing event page's content and settings.' An agent can distinguish this from create_event, update_checkout_page and update_form 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 directs the agent to call get_event first for a partial update, and routes sub-resources away from this tool to create_field/update_field/delete_field, the ticket group tools and the ticket type tools. Theme work is likewise routed to list_themes and list_theme_properties, so the agent knows what this tool is not for.

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, disabled, default value, visibility rules and more. Only supplied properties change; options are replaced wholesale. Set disabled: true to switch a field off without deleting it (the customer email field cannot be disabled). Get field IDs from get_checkout_page, get_form, or get_event. Mutating. formLayout on the page decides the form's order. Each field's order is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's order. On a page that has never saved a layout, setting order moves the field; once a layout is saved, move fields with formLayout instead.

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.
orderNoPosition of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead.
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.
disabledNoWhether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.
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.
referenceNoStable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks.
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

NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Despite annotations already flagging destructiveHint and openWorldHint, the description adds real behavior: only supplied properties change (PATCH semantics), options are replaced wholesale so showHideLogic references break, the customer email field cannot be disabled, and changing `reference` breaks Zapier/webhook integrations. The disabled-field consequences (not rendered, not prefilled, never submitted) are exactly the kind of blast-radius detail annotations cannot express.

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 partial-update semantics, then the disabled switch, then ID sourcing, then mutability. The closing order/formLayout paragraph is long and repeats the schema's `order` text nearly verbatim, which is the main redundancy; otherwise every sentence carries 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 26-parameter mutation tool with an output schema and annotations in place, the description covers what the schema cannot: partial-update semantics, destructive side effects on options and references, the email-field exception, and the layout/ordering interaction. Nothing an agent needs in order 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 coverage is 100%, so baseline is 3; the description still adds meaning, notably 'Only supplied properties change' (partial-update contract not obvious from a non-required schema), the wholesale options replacement warning, and the email-field constraint that appears nowhere in the schema. The order/formLayout guidance largely duplicates the schema's own `order` description, which caps it below 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?

Specific verb plus resource and scope: 'Update one custom field on a checkout page, form, or event,' followed by an enumeration of the mutable properties. The phrase 'Set disabled: true to switch a field off without deleting it' implicitly steers the agent away from delete_field, and 'Get field IDs from get_checkout_page, get_form, or get_event' points at the read siblings, so an agent can place it among the 70+ siblings 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 concrete routing: fetch IDs from get_checkout_page/get_form/get_event, and use formLayout (not order) to move fields once a layout exists. Also warns to only send `reference` when the seller asks. It states context clearly but offers no explicit 'do not use this for X' exclusions, e.g. creating a new field belongs to create_field.

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.

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.
formLayoutNoReplaces how the page's form is arranged, top to bottom. Reference fields by `fieldId`, the ids in the page's `fields`; an id that is not on the page is rejected. Send the whole layout: read the current one from `formLayout` on the page, change it and send it back. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.
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. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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 plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable="<id>" operator="<operator>" value="<value>">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal.
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

NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

The description adds important behavioral context beyond annotations: changing themeId replaces the page's own theme settings, including order bump styling, and drops labels and translations unless themeOverrides is sent in the same request. It also notes that the page's locale is kept, which is exactly the kind of side-effect disclosure needed for a destructive update.

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 front-loaded with purpose and partial-update guidance, then moves to field and theme-specific constraints. Despite covering multiple risky areas, every sentence is relevant and earns its place.

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?

Given the 40-parameter schema, high schema description coverage, output schema, and destructive annotations, the description is largely complete for safe invocation. It covers the riskiest theme-update side effects and partial-update workflow, though it does not mention formLayout or formDetails specifically; the schema compensates for those omissions.

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 90%, so the schema already carries most parameter semantics. The description adds useful cross-field guidance for themeId, themeOverrides, and hostedLayoutType, but it does not explain most of the 40 parameters, leaving the schema to do 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: updating an existing form page's content and settings. It distinguishes form page updates from field management via create_field, update_field, and delete_field, and from reading via get_form. An agent can identify the tool's scope 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 clear workflow guidance: read current values with get_form before a partial update, use field tools for custom fields, and use list_theme_properties/list_themes for theme-related work. It does not explicitly contrast update_form with update_checkout_page or update_event, but the form-page scope is clear.

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

update_order_bumpA
Destructive
Inspect

Change how an order bump is offered on one checkout page or event: enabled, preselected, hidden, the show/hide rule, quantity and description clamping. Only supplied fields change. Edit the product's copy and price with update_product. Mutating.

NameRequiredDescriptionDefault
hiddenNoHide the order bump unless the page URL reveals it with `?show_order_bumps=` and the product price reference.
pageIdYesThe ID of the checkout page or event. Use the type you fetched it with (get_checkout_page or get_event).
enabledNoWhether the order bump is offered. A disabled order bump stays on the page but is not shown.
pageTypeYesThe kind of page the order bump is on: `checkout` for a checkout page, `event` for an event (where order bumps are shown as add-ons).
productIdYesThe ID of the order bump product placed on the page. Listed as `productId` by list_order_bumps.
preselectedNoWhether the order bump is ticked when the page loads.
allowQuantityNoLet the customer pick a quantity. Off, the order bump is bought once.
showHideLogicNoRule that shows the order bump only for some selections. Sent whole: it replaces the stored rule.
shortenDescriptionNoClamp a long description behind a Show more toggle.

Output 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=true, and the description adds the partial-update contract ('Only supplied fields change') plus a reinforcing 'Mutating.' That patch semantics is exactly the extra behavioral context the annotation cannot express. It stops short of stating permissions, reversibility, or whether a cleared rule can be restored, which is why it is 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.

Conciseness5/5

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

Three short sentences with zero filler: what changes, the partial-update guarantee, the alternative tool, and a mutability flag. The scope statement is front-loaded and every sentence carries a distinct decision-relevant 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?

For a 9-parameter, nested, destructive mutation with an output schema already present, the description supplies the pieces the structure does not: patch semantics, the product-editing alternative, and a mutation warning. Nothing an agent needs in order 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.

Parameters4/5

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

Schema coverage is 100% and the nested showHideLogic object is exhaustively documented in-schema, so the baseline is 3. The description still earns a bump by stating 'Only supplied fields change', which tells the agent that omitted booleans and rules are left untouched rather than reset — a semantic the schema alone does not convey.

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?

A specific verb plus resource plus scope: 'Change how an order bump is offered on one checkout page or event', then enumerated facets (enabled, preselected, hidden, show/hide rule, quantity, description clamping). It also distinguishes itself from the closely related sibling by naming update_product for copy and price edits, so the agent can tell the two apart 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?

It gives an explicit routing rule for the most confusable case: 'Edit the product's copy and price with update_product.' That is real when-to-use-for-what guidance. It does not cover the create/delete/reorder order-bump siblings, but the operation-vs-configuration split is clear from the verb 'change'.

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.

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

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 adds the specific mechanics that matter: only supplied fields change, prices[]/variants[] replace the whole list, the change propagates to every page selling the product immediately, and there is no undo because previous values are not retained. This is exactly the behavioral context 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.

Conciseness5/5

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

Five sentences, zero filler, and the ordering is deliberate: what it does, where the routing boundary is, the patch-vs-replace rule, the blast radius, then irreversibility. The riskiest fact (no undo) lands last for emphasis without burying the operational rules.

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 22-parameter destructive mutation with deep nesting and an output schema, the description covers everything an agent must know before calling: scope of change, replacement semantics, read-before-write, propagation, and irreversibility. Return values are covered by the output schema, so 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?

With 95% schema description coverage the schema already carries the parameter detail, so the baseline applies. The description still adds value by singling out the two replace-whole-list parameters (prices[], variants[]) and pointing at get_product for their current values, which is the highest-risk semantic in 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?

Names a specific verb and resource ('Update an existing product') and enumerates the domains it covers (prices, variants, stock, tax, files). It goes further and explicitly disambiguates from the sibling update_checkout_page by stating that pricing lives here, so an agent can route between the two 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?

Gives an explicit either/or: use this, not update_checkout_page, to change what a page sells. It also states a prerequisite workflow — read current values with get_product first — which is exactly the guidance an agent needs before a replacing update.

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.

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

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.

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

NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, it discloses the real blast radius: only supplied fields change, booking and customer records are untouched, and the ticket PDF is regenerated on attendee changes. It also explains per-entry metadata merge semantics and warns about concurrent door-staff writes, which a caller could not infer from the schema alone.

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?

Three sentences, front-loaded with the purpose and the discovery prerequisite, then the non-obvious side effects. The metadata merge rule is stated twice (description and schema), a modest redundancy, but no sentence 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?

For a destructive single-ticket mutation with 4 parameters and an output schema, the description covers prerequisites, side effects, partial-update behavior, and metadata merge rules. Nothing an agent needs to avoid a bad write 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 genuinely useful meaning: null semantics for clearing, that attendeeEmail cannot be cleared, and that partial updates leave unspecified fields intact. It does not restate formats or the email regex, which the schema already covers.

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 ("Update the attendee details ... and metadata held on one event ticket") and scopes it to a single ticket, which cleanly separates it from siblings like update_ticket_type and update_ticket_group. An agent can identify exactly what this tool mutates 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 explicitly routes discovery through `list_tickets` (by attendee name, email, or short ID) and warns to confirm the target ticket before calling. It stops short of stating when a different update tool is appropriate, but the prerequisite guidance is concrete and actionable.

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

update_ticket_groupA
Destructive
Inspect

Update one ticket group on an event: name, capacity, sale window, availability trigger (null removes it), selection type, bulk discounts, visibility and more. Only supplied properties change. Its ticket types are managed with create_ticket_type, update_ticket_type and archive_ticket_type. Get the event and group IDs from get_event. Mutating.

NameRequiredDescriptionDefault
nameNo
hiddenNo
layoutNo
pageIdYesThe ID of the event. Event IDs come from list_events, or the `id` that create_event returns.
statusNo
capacityNo
preselectNo
referenceNo
saleEndOnNo
feeDisplayNo
descriptionNo
saleStartOnNo
bulkDiscountsNo
ticketGroupIdYesThe ID of the ticket group. get_event lists the event's groups under `ticketGroups[].id`.
hideWhenSoldOutNo
hideWhenNotOnSaleNo
hideWhenScheduledNo
hideWhenUnavailableNo
ticketSelectionTypeNo
availabilityBehaviorNo
triggerTicketGroupIdNoID of another ticket group on the same event whose sale end or sell-out makes this group available. Required when `availabilityBehavior` is `after_ticket_sale_ends`, `after_ticket_sold_out` or `after_ticket_ends_or_sold_out`. Find it under `ticketGroups[].id` in get_event. Pass null to remove the trigger.

Output Schema

NameRequiredDescription
dataYes

TDQS

A3.9/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 corroborates with 'Mutating'. It adds genuinely useful behavior beyond that: 'Only supplied properties change' (PATCH semantics) and 'null removes it' for the availability trigger. It does not state what happens to omitted nested collections like bulkDiscounts, which is the main remaining gap for 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?

Dense and front-loaded: the resource and scope come first, then the update semantics, then routing. 'and more' is the one wasted phrase, slightly undermining the enumeration it caps.

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 and annotations cover return shape and safety profile, so those needs are met. But for a 21-parameter mutation with 14% schema coverage, the description leaves most field semantics undocumented, which is a meaningful shortfall for correct invocation.

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 14% across 21 parameters, so the description must compensate and largely does not. It names a handful of fields and clarifies the trigger's null-removal behavior, but says nothing about layout, preselect, status, feeDisplay, the hideWhen* booleans, or what null means for the other nullable fields.

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 group on an event') and enumerates the modifiable surface: name, capacity, sale window, availability trigger, selection type, bulk discounts, visibility. An agent can distinguish this from update_ticket_type and 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?

Routes the agent explicitly: ticket types belong to create_ticket_type/update_ticket_type/archive_ticket_type, and IDs come from get_event. That's clear context for when this tool is and isn't the right one, though it offers no explicit exclusion or precondition failure behavior.

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, its showHideLogic rule (null removes it) 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.

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`.
showHideLogicNo
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

NameRequiredDescription
dataYes

TDQS

A3.9/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 reinforces this with 'Mutating.' More valuably, it discloses partial-update semantics ('Only supplied properties change') and null-as-removal ('null removes it'), which are behavioral traits the annotations do not convey. It stops short of covering reversibility or permission requirements.

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 mutation and its field list are front-loaded in the first sentence, with prerequisites and the move option following. The opening sentence is dense but every clause carries information; no filler sentences.

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 29-parameter mutation the description covers the critical semantics (partial update, null-removal, ID provenance, move-before-changes is in the schema, output schema exists so return values need no explanation). Still, most parameters are left to name inference, and the overlap between status='archived' and the archive_ticket_type sibling is unaddressed.

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 21% across 29 parameters, so the description is expected to compensate and largely does not. It names roughly six fields (name, price, capacity, sale window, visibility, showHideLogic) and hand-waves the rest with 'and more', leaving status, pricing, feeAmount, quantity limits, availabilityBehavior, triggerTicketTypeId and all the hideWhen* flags undocumented outside their bare type names.

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 precise verb and resource ('Update one ticket type on an event') and enumerates the mutable surface (name, price, capacity, sale window, visibility, showHideLogic) plus the relocation capability via moveToTicketGroupId. This clearly separates it from create_ticket_type, archive_ticket_type and update_ticket without the agent needing to open 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 concrete prerequisites and provenance: 'Get the event, group and ticket type IDs from get_event.' It also flags the move path as an in-tool alternative to a separate call. It does not, however, state when NOT to use it (e.g. status='archived' vs the sibling archive_ticket_type), so there is no exclusion guidance.

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.

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

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 (readOnlyHint=false, destructiveHint=true) by disclosing non-obvious semantics: only supplied fields change, events are replaced wholesale, existing headers are preserved and returned as `[hidden]`, and headers must be edited via the dashboardUrl instead. That last point is a genuine safety/behavior disclosure the structured fields do not carry.

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 is front-loaded and every sentence carries operational weight, including the header caveat and the list_webhooks pointer. It is dense and slightly sprawling in the middle, but no sentence is redundant 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?

For a 5-parameter mutation tool with a full schema and an output schema present, the description covers what changes, what is preserved, what cannot be set here, and how to discover the id. 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.

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 the schema lacks: partial-update semantics for all fields and wholesale replacement for `events`. This resolves the key ambiguity an agent would otherwise hit when passing a partial event list.

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 plus the exact mutable surface: name, https URL, subscribed events, and status. It also disambiguates status as pause/resume and routes the agent to list_webhooks for the id, so it is separable from create_webhook, get_webhook, delete_webhook, and list_webhooks without reading their schemas.

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 usage direction: call list_webhooks first to obtain the webhookId, use status=inactive to pause instead of deleting, and never solicit custom header values from the user. It stops short of an explicit when-not-this-tool statement (e.g. use create_webhook for a new endpoint), which keeps it below a 5.

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.

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

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. 8 tool updates
    • Changedcreate_webhook4 fields changed
      • changedInput schema / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."New value: +"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changeddelete_webhook2 fields changed
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changedget_webhook2 fields changed
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changedlist_theme_properties1 field changed
      • changedOutput schema / properties / note / description
        Previous value: -"Set 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."New value: +"Set 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. When `customCss` is listed, it also says which class names custom CSS can select and how to write it."
    • Changedlist_tickets2 fields changed
      • addedOutput schema / properties / data / items / properties / cancelReason
        Added value: +{
        +  "description": "Why the seller canceled this ticket. Set only when the ticket was canceled on its own: when the whole booking is canceled, the reason is kept on the booking.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / items / properties / canceledBy
        Added value: +{
        +  "description": "ID of the dashboard user who canceled this ticket. Set only when the ticket was canceled on its own.",
        +  "type": "string"
        +}
    • Changedlist_webhooks3 fields changed
      • changedInput schema / properties / event / enum
        Previous value: -[
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
      • changedOutput schema / properties / data / items / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / items / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changedupdate_ticket2 fields changed
      • addedOutput schema / properties / data / properties / cancelReason
        Added value: +{
        +  "description": "Why the seller canceled this ticket. Set only when the ticket was canceled on its own: when the whole booking is canceled, the reason is kept on the booking.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / canceledBy
        Added value: +{
        +  "description": "ID of the dashboard user who canceled this ticket. Set only when the ticket was canceled on its own.",
        +  "type": "string"
        +}
    • Changedupdate_webhook4 fields changed
      • changedInput schema / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."New value: +"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, ticket.canceled, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "payment.canceled",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "booking.canceled",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "submission.canceled",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "ticket.canceled",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
  2. 9 tool updates
    • Changedcreate_booking3 fields changed
      • removedInput schema / properties / attendees
        Removed value: -{
        -  "description": "Attendees for an event that collects attendee details, at most one per ticket. Each attendee names its ticket type and takes the next ticket of that type, so the order of the list doesn't matter. Tickets without an attendee are left blank, and the booking then waits for them. An attendee with answers must have a `name` or an `email`. Answer the event's `attendeeQuestions` by `id` in `answers`; the name and email address go in `name` and `email`. Ignored for events that don't collect attendee details.",
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "answers": {
        -        "items": {
        -          "properties": {
        -            "fieldId": {
        -              "description": "ID of one of the event's `attendeeQuestions`. Any other ID, including the event's Name and Email address questions, is refused with a 400.",
        -              "type": "string"
        -            },
        -            "value": {
        -              "maxLength": 5000,
        -              "type": "string"
        -            },
        -            "values": {
        -              "items": {
        -                "maxLength": 1000,
        -                "type": "string"
        -              },
        -              "maxItems": 100,
        -              "type": "array"
        -            }
        -          },
        -          "required": [
        -            "fieldId"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 100,
        -        "type": "array"
        -      },
        -      "email": {
        -        "maxLength": 320,
        -        "type": "string"
        -      },
        -      "name": {
        -        "maxLength": 200,
        -        "type": "string"
        -      },
        -      "ticketTypeId": {
        -        "description": "ID of the ticket type this attendee holds. Must be one of the ticket types in `tickets`.",
        -        "pattern": "^[0-9a-fA-F]{24}$",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ticketTypeId"
        -    ],
        -    "type": "object"
        -  },
        -  "maxItems": 1000,
        -  "type": "array"
        -}
      • removedOutput schema / properties / data / properties / attendeeStatus
        Removed value: -{
        -  "description": "Attendee details: `complete` (every ticket has an attendee), `missing` (some tickets don't yet), `flagged` (one or more attendees flagged for the seller to review) or `optional` (the customer isn't asked, so the seller adds attendees if they want to). Absent while a booking has no attendee details to track.",
        -  "enum": [
        -    "complete",
        -    "missing",
        -    "flagged",
        -    "optional"
        -  ],
        -  "type": "string"
        -}
      • removedOutput schema / properties / data / properties / attendees
        Removed value: -{
        -  "description": "The attendees added so far, one per ticket, on events that collect attendee details. A ticket without an attendee has no entry.",
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "answers": {
        -        "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "element": {
        -              "anyOf": [
        -                {
        -                  "enum": [
        -                    "checkbox",
        -                    "quantity",
        -                    "multiple-choice",
        -                    "select",
        -                    "multi-select",
        -                    "po-number",
        -                    "text",
        -                    "textarea",
        -                    "number",
        -                    "date-time",
        -                    "date",
        -                    "time",
        -                    "address",
        -                    "email",
        -                    "tax-id",
        -                    "phone",
        -                    "country"
        -                  ],
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "fieldId": {
        -              "description": "Unique field ID.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "label": {
        -              "description": "Label shown for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "meta": {
        -              "anyOf": [
        -                {
        -                  "additionalProperties": {},
        -                  "propertyNames": {
        -                    "type": "string"
        -                  },
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "reference": {
        -              "description": "Reference key for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "type": {
        -              "anyOf": [
        -                {
        -                  "enum": [
        -                    "",
        -                    "company-name",
        -                    "po-number",
        -                    "name",
        -                    "first-name",
        -                    "last-name",
        -                    "email",
        -                    "billing-email",
        -                    "phone",
        -                    "address-line1",
        -                    "address-city",
        -                    "address-country",
        -                    "address-line2",
        -                    "address-postal_code",
        -                    "address-state",
        -                    "shipping-name",
        -                    "shipping-phone",
        -                    "shipping-address-line1",
        -                    "shipping-address-city",
        -                    "shipping-address-country",
        -                    "shipping-address-line2",
        -                    "shipping-address-postal_code",
        -                    "shipping-address-state",
        -                    "tax-id"
        -                  ],
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "value": {
        -              "description": "Submitted value for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "values": {
        -              "anyOf": [
        -                {
        -                  "items": {
        -                    "type": "string"
        -                  },
        -                  "type": "array"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "email": {
        -        "description": "The attendee's email address.",
        -        "type": "string"
        -      },
        -      "flagged": {
        -        "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "description": "The attendee's name.",
        -        "type": "string"
        -      },
        -      "position": {
        -        "description": "Attendee number, 1 for the first ticket, in the order the event lists its ticket types.",
        -        "type": "number"
        -      },
        -      "reviewedAt": {
        -        "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "ticketId": {
        -        "description": "ID of the attendee's ticket. Absent until the booking's tickets are created, which happens once it's paid or confirmed.",
        -        "type": "string"
        -      },
        -      "ticketTypeId": {
        -        "description": "ID of the ticket type this attendee holds.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "position",
        -      "ticketTypeId"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
    • Changedcreate_event3 fields changed
      • changedInput schema / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "attendeeDetails": {
        -        "description": "Attendee details for this event: whether a name and email address are collected for each ticket, when, and which email addresses are accepted. The attendee questions start as Name and Email address; add more in the dashboard.",
        -        "properties": {
        -          "description": {
        -            "description": "Text under the heading.",
        -            "maxLength": 120,
        -            "type": "string"
        -          },
        -          "emailDomains": {
        -            "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        -            "enum": [
        -              "any",
        -              "flag",
        -              "work",
        -              "workFlag",
        -              "same"
        -            ],
        -            "type": "string"
        -          },
        -          "enabled": {
        -            "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        -            "type": "boolean"
        -          },
        -          "heading": {
        -            "description": "Heading above the attendee rows.",
        -            "maxLength": 200,
        -            "type": "string"
        -          },
        -          "requireAllBeforePayment": {
        -            "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        -            "type": "boolean"
        -          },
        -          "saveButton": {
        -            "description": "Label of each attendee row's save button.",
        -            "maxLength": 40,
        -            "type": "string"
        -          },
        -          "sendReminders": {
        -            "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        -            "type": "boolean"
        -          },
        -          "when": {
        -            "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        -            "enum": [
        -              "checkout",
        -              "afterBooking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "capacity": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "currency": {
        -        "anyOf": [
        -          {
        -            "maxLength": 3,
        -            "minLength": 3,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "amountOff": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "minimum": 1,
        -                  "type": "number"
        -                },
        -                "percentOff": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 100,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "total_quantity",
        -                    "ticket_type_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "anyOf": [
        -                          {
        -                            "properties": {
        -                              "key": {
        -                                "type": "string"
        -                              }
        -                            },
        -                            "required": [
        -                              "key"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "properties": {
        -                              "id": {
        -                                "type": "string"
        -                              }
        -                            },
        -                            "required": [
        -                              "id"
        -                            ],
        -                            "type": "object"
        -                          }
        -                        ]
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition",
        -                "minQuantity"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "anyOf": [
        -          {
        -            "pattern": "^https?:\\/\\/.+",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "capacity": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "currency": {
        +        "anyOf": [
        +          {
        +            "maxLength": 3,
        +            "minLength": 3,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "amountOff": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "minimum": 1,
        +                  "type": "number"
        +                },
        +                "percentOff": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 100,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "total_quantity",
        +                    "ticket_type_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "anyOf": [
        +                          {
        +                            "properties": {
        +                              "key": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "key"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "properties": {
        +                              "id": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "id"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ]
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition",
        +                "minQuantity"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "anyOf": [
        +          {
        +            "pattern": "^https?:\\/\\/.+",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / data / properties / attendeeQuestions
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/Field"
        -  },
        -  "type": "array"
        -}
      • changedOutput schema / properties / data / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "attendeeDetails": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "description": "Attendee details settings for this event.",
        -            "properties": {
        -              "description": {
        -                "description": "Text under the heading.",
        -                "maxLength": 120,
        -                "type": "string"
        -              },
        -              "emailDomains": {
        -                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        -                "enum": [
        -                  "any",
        -                  "flag",
        -                  "work",
        -                  "workFlag",
        -                  "same"
        -                ],
        -                "type": "string"
        -              },
        -              "enabled": {
        -                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        -                "type": "boolean"
        -              },
        -              "enabledAt": {
        -                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        -                "type": "string"
        -              },
        -              "heading": {
        -                "description": "Heading above the attendee rows.",
        -                "maxLength": 200,
        -                "type": "string"
        -              },
        -              "requireAllBeforePayment": {
        -                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "saveButton": {
        -                "description": "Label of each attendee row's save button.",
        -                "maxLength": 40,
        -                "type": "string"
        -              },
        -              "sendReminders": {
        -                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "when": {
        -                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        -                "enum": [
        -                  "checkout",
        -                  "afterBooking"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_booking2 fields changed
      • removedOutput schema / properties / data / properties / attendeeStatus
        Removed value: -{
        -  "description": "Attendee details: `complete` (every ticket has an attendee), `missing` (some tickets don't yet), `flagged` (one or more attendees flagged for the seller to review) or `optional` (the customer isn't asked, so the seller adds attendees if they want to). Absent while a booking has no attendee details to track.",
        -  "enum": [
        -    "complete",
        -    "missing",
        -    "flagged",
        -    "optional"
        -  ],
        -  "type": "string"
        -}
      • removedOutput schema / properties / data / properties / attendees
        Removed value: -{
        -  "description": "The attendees added so far, one per ticket, on events that collect attendee details. A ticket without an attendee has no entry.",
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "answers": {
        -        "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "element": {
        -              "anyOf": [
        -                {
        -                  "enum": [
        -                    "checkbox",
        -                    "quantity",
        -                    "multiple-choice",
        -                    "select",
        -                    "multi-select",
        -                    "po-number",
        -                    "text",
        -                    "textarea",
        -                    "number",
        -                    "date-time",
        -                    "date",
        -                    "time",
        -                    "address",
        -                    "email",
        -                    "tax-id",
        -                    "phone",
        -                    "country"
        -                  ],
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "fieldId": {
        -              "description": "Unique field ID.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "label": {
        -              "description": "Label shown for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "meta": {
        -              "anyOf": [
        -                {
        -                  "additionalProperties": {},
        -                  "propertyNames": {
        -                    "type": "string"
        -                  },
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "reference": {
        -              "description": "Reference key for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "type": {
        -              "anyOf": [
        -                {
        -                  "enum": [
        -                    "",
        -                    "company-name",
        -                    "po-number",
        -                    "name",
        -                    "first-name",
        -                    "last-name",
        -                    "email",
        -                    "billing-email",
        -                    "phone",
        -                    "address-line1",
        -                    "address-city",
        -                    "address-country",
        -                    "address-line2",
        -                    "address-postal_code",
        -                    "address-state",
        -                    "shipping-name",
        -                    "shipping-phone",
        -                    "shipping-address-line1",
        -                    "shipping-address-city",
        -                    "shipping-address-country",
        -                    "shipping-address-line2",
        -                    "shipping-address-postal_code",
        -                    "shipping-address-state",
        -                    "tax-id"
        -                  ],
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "value": {
        -              "description": "Submitted value for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "values": {
        -              "anyOf": [
        -                {
        -                  "items": {
        -                    "type": "string"
        -                  },
        -                  "type": "array"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "email": {
        -        "description": "The attendee's email address.",
        -        "type": "string"
        -      },
        -      "flagged": {
        -        "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "description": "The attendee's name.",
        -        "type": "string"
        -      },
        -      "position": {
        -        "description": "Attendee number, 1 for the first ticket, in the order the event lists its ticket types.",
        -        "type": "number"
        -      },
        -      "reviewedAt": {
        -        "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "ticketId": {
        -        "description": "ID of the attendee's ticket. Absent until the booking's tickets are created, which happens once it's paid or confirmed.",
        -        "type": "string"
        -      },
        -      "ticketTypeId": {
        -        "description": "ID of the ticket type this attendee holds.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "position",
        -      "ticketTypeId"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
    • Changedget_event2 fields changed
      • removedOutput schema / properties / data / properties / attendeeQuestions
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/Field"
        -  },
        -  "type": "array"
        -}
      • changedOutput schema / properties / data / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "attendeeDetails": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "description": "Attendee details settings for this event.",
        -            "properties": {
        -              "description": {
        -                "description": "Text under the heading.",
        -                "maxLength": 120,
        -                "type": "string"
        -              },
        -              "emailDomains": {
        -                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        -                "enum": [
        -                  "any",
        -                  "flag",
        -                  "work",
        -                  "workFlag",
        -                  "same"
        -                ],
        -                "type": "string"
        -              },
        -              "enabled": {
        -                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        -                "type": "boolean"
        -              },
        -              "enabledAt": {
        -                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        -                "type": "string"
        -              },
        -              "heading": {
        -                "description": "Heading above the attendee rows.",
        -                "maxLength": 200,
        -                "type": "string"
        -              },
        -              "requireAllBeforePayment": {
        -                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "saveButton": {
        -                "description": "Label of each attendee row's save button.",
        -                "maxLength": 40,
        -                "type": "string"
        -              },
        -              "sendReminders": {
        -                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "when": {
        -                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        -                "enum": [
        -                  "checkout",
        -                  "afterBooking"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_bookings2 fields changed
      • removedOutput schema / properties / data / items / properties / attendeeStatus
        Removed value: -{
        -  "description": "Attendee details: `complete` (every ticket has an attendee), `missing` (some tickets don't yet), `flagged` (one or more attendees flagged for the seller to review) or `optional` (the customer isn't asked, so the seller adds attendees if they want to). Absent while a booking has no attendee details to track.",
        -  "enum": [
        -    "complete",
        -    "missing",
        -    "flagged",
        -    "optional"
        -  ],
        -  "type": "string"
        -}
      • removedOutput schema / properties / data / items / properties / attendees
        Removed value: -{
        -  "description": "The attendees added so far, one per ticket, on events that collect attendee details. A ticket without an attendee has no entry.",
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "answers": {
        -        "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "element": {
        -              "anyOf": [
        -                {
        -                  "enum": [
        -                    "checkbox",
        -                    "quantity",
        -                    "multiple-choice",
        -                    "select",
        -                    "multi-select",
        -                    "po-number",
        -                    "text",
        -                    "textarea",
        -                    "number",
        -                    "date-time",
        -                    "date",
        -                    "time",
        -                    "address",
        -                    "email",
        -                    "tax-id",
        -                    "phone",
        -                    "country"
        -                  ],
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "fieldId": {
        -              "description": "Unique field ID.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "label": {
        -              "description": "Label shown for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "meta": {
        -              "anyOf": [
        -                {
        -                  "additionalProperties": {},
        -                  "propertyNames": {
        -                    "type": "string"
        -                  },
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "reference": {
        -              "description": "Reference key for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "type": {
        -              "anyOf": [
        -                {
        -                  "enum": [
        -                    "",
        -                    "company-name",
        -                    "po-number",
        -                    "name",
        -                    "first-name",
        -                    "last-name",
        -                    "email",
        -                    "billing-email",
        -                    "phone",
        -                    "address-line1",
        -                    "address-city",
        -                    "address-country",
        -                    "address-line2",
        -                    "address-postal_code",
        -                    "address-state",
        -                    "shipping-name",
        -                    "shipping-phone",
        -                    "shipping-address-line1",
        -                    "shipping-address-city",
        -                    "shipping-address-country",
        -                    "shipping-address-line2",
        -                    "shipping-address-postal_code",
        -                    "shipping-address-state",
        -                    "tax-id"
        -                  ],
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "value": {
        -              "description": "Submitted value for the field.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "values": {
        -              "anyOf": [
        -                {
        -                  "items": {
        -                    "type": "string"
        -                  },
        -                  "type": "array"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "email": {
        -        "description": "The attendee's email address.",
        -        "type": "string"
        -      },
        -      "flagged": {
        -        "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        -        "type": "boolean"
        -      },
        -      "name": {
        -        "description": "The attendee's name.",
        -        "type": "string"
        -      },
        -      "position": {
        -        "description": "Attendee number, 1 for the first ticket, in the order the event lists its ticket types.",
        -        "type": "number"
        -      },
        -      "reviewedAt": {
        -        "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "ticketId": {
        -        "description": "ID of the attendee's ticket. Absent until the booking's tickets are created, which happens once it's paid or confirmed.",
        -        "type": "string"
        -      },
        -      "ticketTypeId": {
        -        "description": "ID of the ticket type this attendee holds.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "position",
        -      "ticketTypeId"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
    • Changedlist_events2 fields changed
      • removedOutput schema / properties / data / items / properties / attendeeQuestions
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/Field"
        -  },
        -  "type": "array"
        -}
      • changedOutput schema / properties / data / items / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "attendeeDetails": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "description": "Attendee details settings for this event.",
        -            "properties": {
        -              "description": {
        -                "description": "Text under the heading.",
        -                "maxLength": 120,
        -                "type": "string"
        -              },
        -              "emailDomains": {
        -                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        -                "enum": [
        -                  "any",
        -                  "flag",
        -                  "work",
        -                  "workFlag",
        -                  "same"
        -                ],
        -                "type": "string"
        -              },
        -              "enabled": {
        -                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        -                "type": "boolean"
        -              },
        -              "enabledAt": {
        -                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        -                "type": "string"
        -              },
        -              "heading": {
        -                "description": "Heading above the attendee rows.",
        -                "maxLength": 200,
        -                "type": "string"
        -              },
        -              "requireAllBeforePayment": {
        -                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "saveButton": {
        -                "description": "Label of each attendee row's save button.",
        -                "maxLength": 40,
        -                "type": "string"
        -              },
        -              "sendReminders": {
        -                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "when": {
        -                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        -                "enum": [
        -                  "checkout",
        -                  "afterBooking"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_tickets3 fields changed
      • removedOutput schema / properties / data / items / properties / attendee
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "The attendee this ticket is for, with their answers, on events that collect attendee details. Absent until the booker or seller adds them. `attendeeName` and `attendeeEmail` follow it.",
        -  "properties": {
        -    "answers": {
        -      "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "element": {
        -            "anyOf": [
        -              {
        -                "enum": [
        -                  "checkbox",
        -                  "quantity",
        -                  "multiple-choice",
        -                  "select",
        -                  "multi-select",
        -                  "po-number",
        -                  "text",
        -                  "textarea",
        -                  "number",
        -                  "date-time",
        -                  "date",
        -                  "time",
        -                  "address",
        -                  "email",
        -                  "tax-id",
        -                  "phone",
        -                  "country"
        -                ],
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "fieldId": {
        -            "description": "Unique field ID.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "label": {
        -            "description": "Label shown for the field.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "meta": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": {},
        -                "propertyNames": {
        -                  "type": "string"
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "reference": {
        -            "description": "Reference key for the field.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "type": {
        -            "anyOf": [
        -              {
        -                "enum": [
        -                  "",
        -                  "company-name",
        -                  "po-number",
        -                  "name",
        -                  "first-name",
        -                  "last-name",
        -                  "email",
        -                  "billing-email",
        -                  "phone",
        -                  "address-line1",
        -                  "address-city",
        -                  "address-country",
        -                  "address-line2",
        -                  "address-postal_code",
        -                  "address-state",
        -                  "shipping-name",
        -                  "shipping-phone",
        -                  "shipping-address-line1",
        -                  "shipping-address-city",
        -                  "shipping-address-country",
        -                  "shipping-address-line2",
        -                  "shipping-address-postal_code",
        -                  "shipping-address-state",
        -                  "tax-id"
        -                ],
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "value": {
        -            "description": "Submitted value for the field.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "values": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "email": {
        -      "description": "The attendee's email address.",
        -      "type": "string"
        -    },
        -    "flagged": {
        -      "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        -      "type": "boolean"
        -    },
        -    "name": {
        -      "description": "The attendee's name.",
        -      "type": "string"
        -    },
        -    "reviewedAt": {
        -      "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        -      "format": "date-time",
        -      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • changedOutput schema / properties / data / items / properties / attendeeEmail / description
        Previous value: -"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."New value: +"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time; editable via the ticket update endpoint."
      • changedOutput schema / properties / data / items / properties / attendeeName / description
        Previous value: -"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."New value: +"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time; editable via the ticket update endpoint."
    • Changedupdate_event3 fields changed
      • changedInput schema / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "attendeeDetails": {
        -        "description": "Attendee details for this event. Only the settings you send change; the rest keep their current values.",
        -        "properties": {
        -          "description": {
        -            "description": "Text under the heading.",
        -            "maxLength": 120,
        -            "type": "string"
        -          },
        -          "emailDomains": {
        -            "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        -            "enum": [
        -              "any",
        -              "flag",
        -              "work",
        -              "workFlag",
        -              "same"
        -            ],
        -            "type": "string"
        -          },
        -          "enabled": {
        -            "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        -            "type": "boolean"
        -          },
        -          "heading": {
        -            "description": "Heading above the attendee rows.",
        -            "maxLength": 200,
        -            "type": "string"
        -          },
        -          "requireAllBeforePayment": {
        -            "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        -            "type": "boolean"
        -          },
        -          "saveButton": {
        -            "description": "Label of each attendee row's save button.",
        -            "maxLength": 40,
        -            "type": "string"
        -          },
        -          "sendReminders": {
        -            "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        -            "type": "boolean"
        -          },
        -          "when": {
        -            "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        -            "enum": [
        -              "checkout",
        -              "afterBooking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "capacity": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "currency": {
        -        "anyOf": [
        -          {
        -            "maxLength": 3,
        -            "minLength": 3,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "amountOff": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "minimum": 1,
        -                  "type": "number"
        -                },
        -                "percentOff": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 100,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "total_quantity",
        -                    "ticket_type_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "properties": {
        -                          "id": {
        -                            "pattern": "^[0-9a-fA-F]{24}$",
        -                            "type": "string"
        -                          }
        -                        },
        -                        "required": [
        -                          "id"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition",
        -                "minQuantity"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "anyOf": [
        -          {
        -            "pattern": "^https?:\\/\\/.+",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "capacity": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "currency": {
        +        "anyOf": [
        +          {
        +            "maxLength": 3,
        +            "minLength": 3,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "amountOff": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "minimum": 1,
        +                  "type": "number"
        +                },
        +                "percentOff": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 100,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "total_quantity",
        +                    "ticket_type_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "properties": {
        +                          "id": {
        +                            "pattern": "^[0-9a-fA-F]{24}$",
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "id"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition",
        +                "minQuantity"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "anyOf": [
        +          {
        +            "pattern": "^https?:\\/\\/.+",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / data / properties / attendeeQuestions
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/Field"
        -  },
        -  "type": "array"
        -}
      • changedOutput schema / properties / data / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "attendeeDetails": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "description": "Attendee details settings for this event.",
        -            "properties": {
        -              "description": {
        -                "description": "Text under the heading.",
        -                "maxLength": 120,
        -                "type": "string"
        -              },
        -              "emailDomains": {
        -                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        -                "enum": [
        -                  "any",
        -                  "flag",
        -                  "work",
        -                  "workFlag",
        -                  "same"
        -                ],
        -                "type": "string"
        -              },
        -              "enabled": {
        -                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        -                "type": "boolean"
        -              },
        -              "enabledAt": {
        -                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        -                "type": "string"
        -              },
        -              "heading": {
        -                "description": "Heading above the attendee rows.",
        -                "maxLength": 200,
        -                "type": "string"
        -              },
        -              "requireAllBeforePayment": {
        -                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "saveButton": {
        -                "description": "Label of each attendee row's save button.",
        -                "maxLength": 40,
        -                "type": "string"
        -              },
        -              "sendReminders": {
        -                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        -                "type": "boolean"
        -              },
        -              "when": {
        -                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        -                "enum": [
        -                  "checkout",
        -                  "afterBooking"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_ticket3 fields changed
      • removedOutput schema / properties / data / properties / attendee
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "The attendee this ticket is for, with their answers, on events that collect attendee details. Absent until the booker or seller adds them. `attendeeName` and `attendeeEmail` follow it.",
        -  "properties": {
        -    "answers": {
        -      "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "element": {
        -            "anyOf": [
        -              {
        -                "enum": [
        -                  "checkbox",
        -                  "quantity",
        -                  "multiple-choice",
        -                  "select",
        -                  "multi-select",
        -                  "po-number",
        -                  "text",
        -                  "textarea",
        -                  "number",
        -                  "date-time",
        -                  "date",
        -                  "time",
        -                  "address",
        -                  "email",
        -                  "tax-id",
        -                  "phone",
        -                  "country"
        -                ],
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "fieldId": {
        -            "description": "Unique field ID.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "label": {
        -            "description": "Label shown for the field.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "meta": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": {},
        -                "propertyNames": {
        -                  "type": "string"
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "reference": {
        -            "description": "Reference key for the field.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "type": {
        -            "anyOf": [
        -              {
        -                "enum": [
        -                  "",
        -                  "company-name",
        -                  "po-number",
        -                  "name",
        -                  "first-name",
        -                  "last-name",
        -                  "email",
        -                  "billing-email",
        -                  "phone",
        -                  "address-line1",
        -                  "address-city",
        -                  "address-country",
        -                  "address-line2",
        -                  "address-postal_code",
        -                  "address-state",
        -                  "shipping-name",
        -                  "shipping-phone",
        -                  "shipping-address-line1",
        -                  "shipping-address-city",
        -                  "shipping-address-country",
        -                  "shipping-address-line2",
        -                  "shipping-address-postal_code",
        -                  "shipping-address-state",
        -                  "tax-id"
        -                ],
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "value": {
        -            "description": "Submitted value for the field.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "values": {
        -            "anyOf": [
        -              {
        -                "items": {
        -                  "type": "string"
        -                },
        -                "type": "array"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "email": {
        -      "description": "The attendee's email address.",
        -      "type": "string"
        -    },
        -    "flagged": {
        -      "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        -      "type": "boolean"
        -    },
        -    "name": {
        -      "description": "The attendee's name.",
        -      "type": "string"
        -    },
        -    "reviewedAt": {
        -      "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        -      "format": "date-time",
        -      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • changedOutput schema / properties / data / properties / attendeeEmail / description
        Previous value: -"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."New value: +"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time; editable via the ticket update endpoint."
      • changedOutput schema / properties / data / properties / attendeeName / description
        Previous value: -"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."New value: +"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time; editable via the ticket update endpoint."
  3. 2 tool updates
    • Changedlist_tickets1 field changed
      • changedOutput schema / properties / data / items / properties / status / description
        Previous value: -"Lifecycle state of the ticket. `PAID` is valid for admission, `CANCELED` was voided by refund or cancellation and must not be admitted."New value: +"Lifecycle state of the ticket. `PAID` is valid for admission, `CANCELED` was canceled by the seller and must not be admitted. A refund alone never cancels a ticket."
    • Changedupdate_ticket1 field changed
      • changedOutput schema / properties / data / properties / status / description
        Previous value: -"Lifecycle state of the ticket. `PAID` is valid for admission, `CANCELED` was voided by refund or cancellation and must not be admitted."New value: +"Lifecycle state of the ticket. `PAID` is valid for admission, `CANCELED` was canceled by the seller and must not be admitted. A refund alone never cancels a ticket."
  4. 9 tool updates
    • Changedcreate_booking3 fields changed
      • addedInput schema / properties / attendees
        Added value: +{
        +  "description": "Attendees for an event that collects attendee details, at most one per ticket. Each attendee names its ticket type and takes the next ticket of that type, so the order of the list doesn't matter. Tickets without an attendee are left blank, and the booking then waits for them. An attendee with answers must have a `name` or an `email`. Answer the event's `attendeeQuestions` by `id` in `answers`; the name and email address go in `name` and `email`. Ignored for events that don't collect attendee details.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "answers": {
        +        "items": {
        +          "properties": {
        +            "fieldId": {
        +              "description": "ID of one of the event's `attendeeQuestions`. Any other ID, including the event's Name and Email address questions, is refused with a 400.",
        +              "type": "string"
        +            },
        +            "value": {
        +              "maxLength": 5000,
        +              "type": "string"
        +            },
        +            "values": {
        +              "items": {
        +                "maxLength": 1000,
        +                "type": "string"
        +              },
        +              "maxItems": 100,
        +              "type": "array"
        +            }
        +          },
        +          "required": [
        +            "fieldId"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 100,
        +        "type": "array"
        +      },
        +      "email": {
        +        "maxLength": 320,
        +        "type": "string"
        +      },
        +      "name": {
        +        "maxLength": 200,
        +        "type": "string"
        +      },
        +      "ticketTypeId": {
        +        "description": "ID of the ticket type this attendee holds. Must be one of the ticket types in `tickets`.",
        +        "pattern": "^[0-9a-fA-F]{24}$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ticketTypeId"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 1000,
        +  "type": "array"
        +}
      • addedOutput schema / properties / data / properties / attendeeStatus
        Added value: +{
        +  "description": "Attendee details: `complete` (every ticket has an attendee), `missing` (some tickets don't yet), `flagged` (one or more attendees flagged for the seller to review) or `optional` (the customer isn't asked, so the seller adds attendees if they want to). Absent while a booking has no attendee details to track.",
        +  "enum": [
        +    "complete",
        +    "missing",
        +    "flagged",
        +    "optional"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / attendees
        Added value: +{
        +  "description": "The attendees added so far, one per ticket, on events that collect attendee details. A ticket without an attendee has no entry.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "answers": {
        +        "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "element": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "checkbox",
        +                    "quantity",
        +                    "multiple-choice",
        +                    "select",
        +                    "multi-select",
        +                    "po-number",
        +                    "text",
        +                    "textarea",
        +                    "number",
        +                    "date-time",
        +                    "date",
        +                    "time",
        +                    "address",
        +                    "email",
        +                    "tax-id",
        +                    "phone",
        +                    "country"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "fieldId": {
        +              "description": "Unique field ID.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "label": {
        +              "description": "Label shown for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "meta": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": {},
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "reference": {
        +              "description": "Reference key for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "type": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "",
        +                    "company-name",
        +                    "po-number",
        +                    "name",
        +                    "first-name",
        +                    "last-name",
        +                    "email",
        +                    "billing-email",
        +                    "phone",
        +                    "address-line1",
        +                    "address-city",
        +                    "address-country",
        +                    "address-line2",
        +                    "address-postal_code",
        +                    "address-state",
        +                    "shipping-name",
        +                    "shipping-phone",
        +                    "shipping-address-line1",
        +                    "shipping-address-city",
        +                    "shipping-address-country",
        +                    "shipping-address-line2",
        +                    "shipping-address-postal_code",
        +                    "shipping-address-state",
        +                    "tax-id"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "value": {
        +              "description": "Submitted value for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "values": {
        +              "anyOf": [
        +                {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "email": {
        +        "description": "The attendee's email address.",
        +        "type": "string"
        +      },
        +      "flagged": {
        +        "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "description": "The attendee's name.",
        +        "type": "string"
        +      },
        +      "position": {
        +        "description": "Attendee number, 1 for the first ticket, in the order the event lists its ticket types.",
        +        "type": "number"
        +      },
        +      "reviewedAt": {
        +        "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "ticketId": {
        +        "description": "ID of the attendee's ticket. Absent until the booking's tickets are created, which happens once it's paid or confirmed.",
        +        "type": "string"
        +      },
        +      "ticketTypeId": {
        +        "description": "ID of the ticket type this attendee holds.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "ticketTypeId"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedcreate_event3 fields changed
      • changedInput schema / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "capacity": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "currency": {
        -        "anyOf": [
        -          {
        -            "maxLength": 3,
        -            "minLength": 3,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "amountOff": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "minimum": 1,
        -                  "type": "number"
        -                },
        -                "percentOff": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 100,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "total_quantity",
        -                    "ticket_type_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "anyOf": [
        -                          {
        -                            "properties": {
        -                              "key": {
        -                                "type": "string"
        -                              }
        -                            },
        -                            "required": [
        -                              "key"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "properties": {
        -                              "id": {
        -                                "type": "string"
        -                              }
        -                            },
        -                            "required": [
        -                              "id"
        -                            ],
        -                            "type": "object"
        -                          }
        -                        ]
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition",
        -                "minQuantity"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "anyOf": [
        -          {
        -            "pattern": "^https?:\\/\\/.+",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "attendeeDetails": {
        +        "description": "Attendee details for this event: whether a name and email address are collected for each ticket, when, and which email addresses are accepted. The attendee questions start as Name and Email address; add more in the dashboard.",
        +        "properties": {
        +          "description": {
        +            "description": "Text under the heading.",
        +            "maxLength": 120,
        +            "type": "string"
        +          },
        +          "emailDomains": {
        +            "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        +            "enum": [
        +              "any",
        +              "flag",
        +              "work",
        +              "workFlag",
        +              "same"
        +            ],
        +            "type": "string"
        +          },
        +          "enabled": {
        +            "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        +            "type": "boolean"
        +          },
        +          "heading": {
        +            "description": "Heading above the attendee rows.",
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          "requireAllBeforePayment": {
        +            "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        +            "type": "boolean"
        +          },
        +          "saveButton": {
        +            "description": "Label of each attendee row's save button.",
        +            "maxLength": 40,
        +            "type": "string"
        +          },
        +          "sendReminders": {
        +            "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        +            "type": "boolean"
        +          },
        +          "when": {
        +            "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        +            "enum": [
        +              "checkout",
        +              "afterBooking"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "capacity": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "currency": {
        +        "anyOf": [
        +          {
        +            "maxLength": 3,
        +            "minLength": 3,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "amountOff": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "minimum": 1,
        +                  "type": "number"
        +                },
        +                "percentOff": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 100,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "total_quantity",
        +                    "ticket_type_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "anyOf": [
        +                          {
        +                            "properties": {
        +                              "key": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "key"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "properties": {
        +                              "id": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "id"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ]
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition",
        +                "minQuantity"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "anyOf": [
        +          {
        +            "pattern": "^https?:\\/\\/.+",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / data / properties / attendeeQuestions
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/Field"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / data / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "attendeeDetails": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "description": "Attendee details settings for this event.",
        +            "properties": {
        +              "description": {
        +                "description": "Text under the heading.",
        +                "maxLength": 120,
        +                "type": "string"
        +              },
        +              "emailDomains": {
        +                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        +                "enum": [
        +                  "any",
        +                  "flag",
        +                  "work",
        +                  "workFlag",
        +                  "same"
        +                ],
        +                "type": "string"
        +              },
        +              "enabled": {
        +                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        +                "type": "boolean"
        +              },
        +              "enabledAt": {
        +                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        +                "type": "string"
        +              },
        +              "heading": {
        +                "description": "Heading above the attendee rows.",
        +                "maxLength": 200,
        +                "type": "string"
        +              },
        +              "requireAllBeforePayment": {
        +                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "saveButton": {
        +                "description": "Label of each attendee row's save button.",
        +                "maxLength": 40,
        +                "type": "string"
        +              },
        +              "sendReminders": {
        +                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "when": {
        +                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        +                "enum": [
        +                  "checkout",
        +                  "afterBooking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_booking2 fields changed
      • addedOutput schema / properties / data / properties / attendeeStatus
        Added value: +{
        +  "description": "Attendee details: `complete` (every ticket has an attendee), `missing` (some tickets don't yet), `flagged` (one or more attendees flagged for the seller to review) or `optional` (the customer isn't asked, so the seller adds attendees if they want to). Absent while a booking has no attendee details to track.",
        +  "enum": [
        +    "complete",
        +    "missing",
        +    "flagged",
        +    "optional"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / attendees
        Added value: +{
        +  "description": "The attendees added so far, one per ticket, on events that collect attendee details. A ticket without an attendee has no entry.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "answers": {
        +        "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "element": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "checkbox",
        +                    "quantity",
        +                    "multiple-choice",
        +                    "select",
        +                    "multi-select",
        +                    "po-number",
        +                    "text",
        +                    "textarea",
        +                    "number",
        +                    "date-time",
        +                    "date",
        +                    "time",
        +                    "address",
        +                    "email",
        +                    "tax-id",
        +                    "phone",
        +                    "country"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "fieldId": {
        +              "description": "Unique field ID.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "label": {
        +              "description": "Label shown for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "meta": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": {},
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "reference": {
        +              "description": "Reference key for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "type": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "",
        +                    "company-name",
        +                    "po-number",
        +                    "name",
        +                    "first-name",
        +                    "last-name",
        +                    "email",
        +                    "billing-email",
        +                    "phone",
        +                    "address-line1",
        +                    "address-city",
        +                    "address-country",
        +                    "address-line2",
        +                    "address-postal_code",
        +                    "address-state",
        +                    "shipping-name",
        +                    "shipping-phone",
        +                    "shipping-address-line1",
        +                    "shipping-address-city",
        +                    "shipping-address-country",
        +                    "shipping-address-line2",
        +                    "shipping-address-postal_code",
        +                    "shipping-address-state",
        +                    "tax-id"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "value": {
        +              "description": "Submitted value for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "values": {
        +              "anyOf": [
        +                {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "email": {
        +        "description": "The attendee's email address.",
        +        "type": "string"
        +      },
        +      "flagged": {
        +        "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "description": "The attendee's name.",
        +        "type": "string"
        +      },
        +      "position": {
        +        "description": "Attendee number, 1 for the first ticket, in the order the event lists its ticket types.",
        +        "type": "number"
        +      },
        +      "reviewedAt": {
        +        "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "ticketId": {
        +        "description": "ID of the attendee's ticket. Absent until the booking's tickets are created, which happens once it's paid or confirmed.",
        +        "type": "string"
        +      },
        +      "ticketTypeId": {
        +        "description": "ID of the ticket type this attendee holds.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "ticketTypeId"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedget_event2 fields changed
      • addedOutput schema / properties / data / properties / attendeeQuestions
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/Field"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / data / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "attendeeDetails": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "description": "Attendee details settings for this event.",
        +            "properties": {
        +              "description": {
        +                "description": "Text under the heading.",
        +                "maxLength": 120,
        +                "type": "string"
        +              },
        +              "emailDomains": {
        +                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        +                "enum": [
        +                  "any",
        +                  "flag",
        +                  "work",
        +                  "workFlag",
        +                  "same"
        +                ],
        +                "type": "string"
        +              },
        +              "enabled": {
        +                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        +                "type": "boolean"
        +              },
        +              "enabledAt": {
        +                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        +                "type": "string"
        +              },
        +              "heading": {
        +                "description": "Heading above the attendee rows.",
        +                "maxLength": 200,
        +                "type": "string"
        +              },
        +              "requireAllBeforePayment": {
        +                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "saveButton": {
        +                "description": "Label of each attendee row's save button.",
        +                "maxLength": 40,
        +                "type": "string"
        +              },
        +              "sendReminders": {
        +                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "when": {
        +                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        +                "enum": [
        +                  "checkout",
        +                  "afterBooking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_bookings2 fields changed
      • addedOutput schema / properties / data / items / properties / attendeeStatus
        Added value: +{
        +  "description": "Attendee details: `complete` (every ticket has an attendee), `missing` (some tickets don't yet), `flagged` (one or more attendees flagged for the seller to review) or `optional` (the customer isn't asked, so the seller adds attendees if they want to). Absent while a booking has no attendee details to track.",
        +  "enum": [
        +    "complete",
        +    "missing",
        +    "flagged",
        +    "optional"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / items / properties / attendees
        Added value: +{
        +  "description": "The attendees added so far, one per ticket, on events that collect attendee details. A ticket without an attendee has no entry.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "answers": {
        +        "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "element": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "checkbox",
        +                    "quantity",
        +                    "multiple-choice",
        +                    "select",
        +                    "multi-select",
        +                    "po-number",
        +                    "text",
        +                    "textarea",
        +                    "number",
        +                    "date-time",
        +                    "date",
        +                    "time",
        +                    "address",
        +                    "email",
        +                    "tax-id",
        +                    "phone",
        +                    "country"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "fieldId": {
        +              "description": "Unique field ID.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "label": {
        +              "description": "Label shown for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "meta": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": {},
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "reference": {
        +              "description": "Reference key for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "type": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "",
        +                    "company-name",
        +                    "po-number",
        +                    "name",
        +                    "first-name",
        +                    "last-name",
        +                    "email",
        +                    "billing-email",
        +                    "phone",
        +                    "address-line1",
        +                    "address-city",
        +                    "address-country",
        +                    "address-line2",
        +                    "address-postal_code",
        +                    "address-state",
        +                    "shipping-name",
        +                    "shipping-phone",
        +                    "shipping-address-line1",
        +                    "shipping-address-city",
        +                    "shipping-address-country",
        +                    "shipping-address-line2",
        +                    "shipping-address-postal_code",
        +                    "shipping-address-state",
        +                    "tax-id"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "value": {
        +              "description": "Submitted value for the field.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "values": {
        +              "anyOf": [
        +                {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "email": {
        +        "description": "The attendee's email address.",
        +        "type": "string"
        +      },
        +      "flagged": {
        +        "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        +        "type": "boolean"
        +      },
        +      "name": {
        +        "description": "The attendee's name.",
        +        "type": "string"
        +      },
        +      "position": {
        +        "description": "Attendee number, 1 for the first ticket, in the order the event lists its ticket types.",
        +        "type": "number"
        +      },
        +      "reviewedAt": {
        +        "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "ticketId": {
        +        "description": "ID of the attendee's ticket. Absent until the booking's tickets are created, which happens once it's paid or confirmed.",
        +        "type": "string"
        +      },
        +      "ticketTypeId": {
        +        "description": "ID of the ticket type this attendee holds.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "position",
        +      "ticketTypeId"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedlist_events2 fields changed
      • addedOutput schema / properties / data / items / properties / attendeeQuestions
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/Field"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / data / items / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "attendeeDetails": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "description": "Attendee details settings for this event.",
        +            "properties": {
        +              "description": {
        +                "description": "Text under the heading.",
        +                "maxLength": 120,
        +                "type": "string"
        +              },
        +              "emailDomains": {
        +                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        +                "enum": [
        +                  "any",
        +                  "flag",
        +                  "work",
        +                  "workFlag",
        +                  "same"
        +                ],
        +                "type": "string"
        +              },
        +              "enabled": {
        +                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        +                "type": "boolean"
        +              },
        +              "enabledAt": {
        +                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        +                "type": "string"
        +              },
        +              "heading": {
        +                "description": "Heading above the attendee rows.",
        +                "maxLength": 200,
        +                "type": "string"
        +              },
        +              "requireAllBeforePayment": {
        +                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "saveButton": {
        +                "description": "Label of each attendee row's save button.",
        +                "maxLength": 40,
        +                "type": "string"
        +              },
        +              "sendReminders": {
        +                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "when": {
        +                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        +                "enum": [
        +                  "checkout",
        +                  "afterBooking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_tickets3 fields changed
      • addedOutput schema / properties / data / items / properties / attendee
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The attendee this ticket is for, with their answers, on events that collect attendee details. Absent until the booker or seller adds them. `attendeeName` and `attendeeEmail` follow it.",
        +  "properties": {
        +    "answers": {
        +      "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "element": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "checkbox",
        +                  "quantity",
        +                  "multiple-choice",
        +                  "select",
        +                  "multi-select",
        +                  "po-number",
        +                  "text",
        +                  "textarea",
        +                  "number",
        +                  "date-time",
        +                  "date",
        +                  "time",
        +                  "address",
        +                  "email",
        +                  "tax-id",
        +                  "phone",
        +                  "country"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "fieldId": {
        +            "description": "Unique field ID.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "label": {
        +            "description": "Label shown for the field.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "meta": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": {},
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "reference": {
        +            "description": "Reference key for the field.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "type": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "",
        +                  "company-name",
        +                  "po-number",
        +                  "name",
        +                  "first-name",
        +                  "last-name",
        +                  "email",
        +                  "billing-email",
        +                  "phone",
        +                  "address-line1",
        +                  "address-city",
        +                  "address-country",
        +                  "address-line2",
        +                  "address-postal_code",
        +                  "address-state",
        +                  "shipping-name",
        +                  "shipping-phone",
        +                  "shipping-address-line1",
        +                  "shipping-address-city",
        +                  "shipping-address-country",
        +                  "shipping-address-line2",
        +                  "shipping-address-postal_code",
        +                  "shipping-address-state",
        +                  "tax-id"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "value": {
        +            "description": "Submitted value for the field.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "values": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "email": {
        +      "description": "The attendee's email address.",
        +      "type": "string"
        +    },
        +    "flagged": {
        +      "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        +      "type": "boolean"
        +    },
        +    "name": {
        +      "description": "The attendee's name.",
        +      "type": "string"
        +    },
        +    "reviewedAt": {
        +      "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / properties / data / items / properties / attendeeEmail / description
        Previous value: -"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time; editable via the ticket update endpoint."New value: +"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."
      • changedOutput schema / properties / data / items / properties / attendeeName / description
        Previous value: -"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time; editable via the ticket update endpoint."New value: +"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."
    • Changedupdate_event3 fields changed
      • changedInput schema / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "capacity": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "currency": {
        -        "anyOf": [
        -          {
        -            "maxLength": 3,
        -            "minLength": 3,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "amountOff": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "minimum": 1,
        -                  "type": "number"
        -                },
        -                "percentOff": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 100,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "total_quantity",
        -                    "ticket_type_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "properties": {
        -                          "id": {
        -                            "pattern": "^[0-9a-fA-F]{24}$",
        -                            "type": "string"
        -                          }
        -                        },
        -                        "required": [
        -                          "id"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition",
        -                "minQuantity"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "anyOf": [
        -          {
        -            "pattern": "^https?:\\/\\/.+",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "attendeeDetails": {
        +        "description": "Attendee details for this event. Only the settings you send change; the rest keep their current values.",
        +        "properties": {
        +          "description": {
        +            "description": "Text under the heading.",
        +            "maxLength": 120,
        +            "type": "string"
        +          },
        +          "emailDomains": {
        +            "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        +            "enum": [
        +              "any",
        +              "flag",
        +              "work",
        +              "workFlag",
        +              "same"
        +            ],
        +            "type": "string"
        +          },
        +          "enabled": {
        +            "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        +            "type": "boolean"
        +          },
        +          "heading": {
        +            "description": "Heading above the attendee rows.",
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          "requireAllBeforePayment": {
        +            "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        +            "type": "boolean"
        +          },
        +          "saveButton": {
        +            "description": "Label of each attendee row's save button.",
        +            "maxLength": 40,
        +            "type": "string"
        +          },
        +          "sendReminders": {
        +            "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        +            "type": "boolean"
        +          },
        +          "when": {
        +            "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        +            "enum": [
        +              "checkout",
        +              "afterBooking"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "capacity": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "currency": {
        +        "anyOf": [
        +          {
        +            "maxLength": 3,
        +            "minLength": 3,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "amountOff": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "minimum": 1,
        +                  "type": "number"
        +                },
        +                "percentOff": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 100,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "total_quantity",
        +                    "ticket_type_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "properties": {
        +                          "id": {
        +                            "pattern": "^[0-9a-fA-F]{24}$",
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "id"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition",
        +                "minQuantity"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "anyOf": [
        +          {
        +            "pattern": "^https?:\\/\\/.+",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / data / properties / attendeeQuestions
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/Field"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / data / properties / eventDetails / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "capacity": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "total_quantity",
        -                        "ticket_type_quantity"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "ticketTypeIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "endDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "limitRegistrations": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "location": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "mapsLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "meetingLink": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "pdfTicketsEnabled": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "platform": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "zoom",
        -              "google_meet",
        -              "microsoft_teams",
        -              "youtube",
        -              "hopin",
        -              "vimeo",
        -              "discord",
        -              "other"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "status": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "active",
        -              "sold_out",
        -              "canceled"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "in_person",
        -              "virtual",
        -              "hybrid"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "attendeeDetails": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "description": "Attendee details settings for this event.",
        +            "properties": {
        +              "description": {
        +                "description": "Text under the heading.",
        +                "maxLength": 120,
        +                "type": "string"
        +              },
        +              "emailDomains": {
        +                "description": "Which attendee email addresses are accepted. `any` (default): any address. `flag`: any, with personal addresses (Gmail, Outlook and the like) flagged for review. `work`: work addresses only. `workFlag`: work addresses only, with ones outside the booker's company flagged for review. `same`: addresses at the booker's company only.",
        +                "enum": [
        +                  "any",
        +                  "flag",
        +                  "work",
        +                  "workFlag",
        +                  "same"
        +                ],
        +                "type": "string"
        +              },
        +              "enabled": {
        +                "description": "Collect a name, an email address and the answers to any attendee questions for each ticket. Defaults to `false`.",
        +                "type": "boolean"
        +              },
        +              "enabledAt": {
        +                "description": "ISO 8601 timestamp of when attendee details were first switched on. Bookings made before it get no automatic reminders.",
        +                "type": "string"
        +              },
        +              "heading": {
        +                "description": "Heading above the attendee rows.",
        +                "maxLength": 200,
        +                "type": "string"
        +              },
        +              "requireAllBeforePayment": {
        +                "description": "With `when: checkout`, every attendee must be added before the customer can pay. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "saveButton": {
        +                "description": "Label of each attendee row's save button.",
        +                "maxLength": 40,
        +                "type": "string"
        +              },
        +              "sendReminders": {
        +                "description": "Email the booker reminders until every attendee is added. Defaults to `true`.",
        +                "type": "boolean"
        +              },
        +              "when": {
        +                "description": "`checkout`: the customer adds attendees before paying. `afterBooking`: they add them after booking, from the confirmation page, their email or the customer portal. Defaults to `checkout`.",
        +                "enum": [
        +                  "checkout",
        +                  "afterBooking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "capacity": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "total_quantity",
        +                        "ticket_type_quantity"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "ticketTypeIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "endDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "limitRegistrations": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "location": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "mapsLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "meetingLink": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "pdfTicketsEnabled": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "platform": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "zoom",
        +              "google_meet",
        +              "microsoft_teams",
        +              "youtube",
        +              "hopin",
        +              "vimeo",
        +              "discord",
        +              "other"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "status": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "active",
        +              "sold_out",
        +              "canceled"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "timezone": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "in_person",
        +              "virtual",
        +              "hybrid"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_ticket3 fields changed
      • addedOutput schema / properties / data / properties / attendee
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The attendee this ticket is for, with their answers, on events that collect attendee details. Absent until the booker or seller adds them. `attendeeName` and `attendeeEmail` follow it.",
        +  "properties": {
        +    "answers": {
        +      "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "element": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "checkbox",
        +                  "quantity",
        +                  "multiple-choice",
        +                  "select",
        +                  "multi-select",
        +                  "po-number",
        +                  "text",
        +                  "textarea",
        +                  "number",
        +                  "date-time",
        +                  "date",
        +                  "time",
        +                  "address",
        +                  "email",
        +                  "tax-id",
        +                  "phone",
        +                  "country"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "fieldId": {
        +            "description": "Unique field ID.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "label": {
        +            "description": "Label shown for the field.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "meta": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": {},
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "reference": {
        +            "description": "Reference key for the field.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "type": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "",
        +                  "company-name",
        +                  "po-number",
        +                  "name",
        +                  "first-name",
        +                  "last-name",
        +                  "email",
        +                  "billing-email",
        +                  "phone",
        +                  "address-line1",
        +                  "address-city",
        +                  "address-country",
        +                  "address-line2",
        +                  "address-postal_code",
        +                  "address-state",
        +                  "shipping-name",
        +                  "shipping-phone",
        +                  "shipping-address-line1",
        +                  "shipping-address-city",
        +                  "shipping-address-country",
        +                  "shipping-address-line2",
        +                  "shipping-address-postal_code",
        +                  "shipping-address-state",
        +                  "tax-id"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "value": {
        +            "description": "Submitted value for the field.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "values": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "email": {
        +      "description": "The attendee's email address.",
        +      "type": "string"
        +    },
        +    "flagged": {
        +      "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
        +      "type": "boolean"
        +    },
        +    "name": {
        +      "description": "The attendee's name.",
        +      "type": "string"
        +    },
        +    "reviewedAt": {
        +      "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / properties / data / properties / attendeeEmail / description
        Previous value: -"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time; editable via the ticket update endpoint."New value: +"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."
      • changedOutput schema / properties / data / properties / attendeeName / description
        Previous value: -"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time; editable via the ticket update endpoint."New value: +"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."
  5. 12 tool updates
    • Changedcreate_booking2 fields changed
      • addedOutput schema / properties / data / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled this, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled this, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcreate_webhook4 fields changed
      • changedInput schema / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."New value: +"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changeddelete_webhook2 fields changed
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changedget_booking2 fields changed
      • addedOutput schema / properties / data / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled this, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled this, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_payment2 fields changed
      • addedOutput schema / properties / data / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled this, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled this, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_submission7 fields changed
      • addedOutput schema / properties / data / properties / canceledAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "ISO 8601 timestamp when the submission was canceled."
        +}
      • addedOutput schema / properties / data / properties / canceledBy
        Added value: +{
        +  "description": "ID of the dashboard user who canceled the submission. Absent when it was canceled through the seller API.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled the submission, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled the submission, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / canceledReason
        Added value: +{
        +  "description": "The reason given when the submission was canceled.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / properties / orderStatus
        Added value: +{
        +  "default": "active",
        +  "description": "Lifecycle status set by the seller. Valid values: active, canceled. `canceled` means the seller canceled the submission: it no longer counts toward \"Prevent duplicate submissions\" and its files left the customer portal.",
        +  "enum": [
        +    "active",
        +    "canceled"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / data / required
        Previous value: -[
        -  "id",
        -  "status",
        -  "createdAt",
        -  "updatedAt",
        -  "dashboardUrl"
        -]New value: +[
        +  "id",
        +  "status",
        +  "orderStatus",
        +  "createdAt",
        +  "updatedAt",
        +  "dashboardUrl"
        +]
    • Changedget_webhook2 fields changed
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changedlist_bookings2 fields changed
      • addedOutput schema / properties / data / items / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled this, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled this, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedlist_payments2 fields changed
      • addedOutput schema / properties / data / items / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled this, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled this, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedlist_submissions8 fields changed
      • addedInput schema / properties / orderStatus
        Added value: +{
        +  "description": "Filter by lifecycle status. Valid values: active, canceled. Without this filter, canceled submissions are included, as in the payments and bookings lists.",
        +  "enum": [
        +    "active",
        +    "canceled"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / items / properties / canceledAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "ISO 8601 timestamp when the submission was canceled."
        +}
      • addedOutput schema / properties / data / items / properties / canceledBy
        Added value: +{
        +  "description": "ID of the dashboard user who canceled the submission. Absent when it was canceled through the seller API.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / canceledByApiKey
        Added value: +{
        +  "description": "ID of the API key that canceled the submission, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / canceledByApiKeyName
        Added value: +{
        +  "description": "Name of the API key that canceled the submission, as it was at the time. Kept when the key is deleted later.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / canceledReason
        Added value: +{
        +  "description": "The reason given when the submission was canceled.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / orderStatus
        Added value: +{
        +  "default": "active",
        +  "description": "Lifecycle status set by the seller. Valid values: active, canceled. `canceled` means the seller canceled the submission: it no longer counts toward \"Prevent duplicate submissions\" and its files left the customer portal.",
        +  "enum": [
        +    "active",
        +    "canceled"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / data / items / required
        Previous value: -[
        -  "id",
        -  "status",
        -  "createdAt",
        -  "updatedAt",
        -  "dashboardUrl"
        -]New value: +[
        +  "id",
        +  "status",
        +  "orderStatus",
        +  "createdAt",
        +  "updatedAt",
        +  "dashboardUrl"
        +]
    • Changedlist_webhooks3 fields changed
      • changedInput schema / properties / event / enum
        Previous value: -[
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
      • changedOutput schema / properties / data / items / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / items / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
    • Changedupdate_webhook4 fields changed
      • changedInput schema / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."New value: +"An event a webhook can subscribe to. Valid values: customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired."
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
      • changedOutput schema / properties / data / properties / events / items / description
        Previous value: -"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, booking.abandoned, booking.created, booking.paid, ticket.created, submission.created, submission.updated, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."New value: +"An event a webhook can subscribe to. Valid values: webhook.test, customer.created, customer.updated, payment.abandoned, payment.created, payment.paid, payment.canceled, booking.abandoned, booking.created, booking.paid, booking.canceled, ticket.created, submission.created, submission.updated, submission.canceled, checkout_page.created, checkout_page.updated, product.created, product.updated, subscription.abandoned, subscription.created, subscription.trialing, subscription.scheduled, subscription.active, subscription.completed, subscription.canceled, subscription.expired. `webhook.test` is the payload sent by the dashboard's test-delivery action."
      • changedOutput schema / properties / data / properties / events / items / enum
        Previous value: -[
        -  "webhook.test",
        -  "customer.created",
        -  "customer.updated",
        -  "payment.abandoned",
        -  "payment.created",
        -  "payment.paid",
        -  "booking.abandoned",
        -  "booking.created",
        -  "booking.paid",
        -  "ticket.created",
        -  "submission.created",
        -  "submission.updated",
        -  "checkout_page.created",
        -  "checkout_page.updated",
        -  "product.created",
        -  "product.updated",
        -  "subscription.abandoned",
        -  "subscription.created",
        -  "subscription.trialing",
        -  "subscription.scheduled",
        -  "subscription.active",
        -  "subscription.completed",
        -  "subscription.canceled",
        -  "subscription.expired"
        -]New value: +[
        +  "webhook.test",
        +  "customer.created",
        +  "customer.updated",
        +  "payment.abandoned",
        +  "payment.created",
        +  "payment.paid",
        +  "payment.canceled",
        +  "booking.abandoned",
        +  "booking.created",
        +  "booking.paid",
        +  "booking.canceled",
        +  "ticket.created",
        +  "submission.created",
        +  "submission.updated",
        +  "submission.canceled",
        +  "checkout_page.created",
        +  "checkout_page.updated",
        +  "product.created",
        +  "product.updated",
        +  "subscription.abandoned",
        +  "subscription.created",
        +  "subscription.trialing",
        +  "subscription.scheduled",
        +  "subscription.active",
        +  "subscription.completed",
        +  "subscription.canceled",
        +  "subscription.expired"
        +]
  6. 4 tool updates
    • Changedcreate_order_bump5 fields changed
      • removedInput schema / properties / showHideLogic / properties / priceId
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "pattern": "^[0-9a-fA-F]{24}$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "For `subject: price`: the page product price ID to watch (from get_product). A rule without one is stored but never hides anything."
        -}
      • addedInput schema / properties / showHideLogic / properties / priceIds
        Added value: +{
        +  "description": "For `subject: price`: the page product price IDs to watch (from get_product). The rule matches while the chosen price is any of them, or none of them for `is_not`. A rule without any is stored but never hides anything.",
        +  "items": {
        +    "pattern": "^[0-9a-fA-F]{24}$",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceId
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceIds
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / $defs / OrderBump / properties / showHideLogic / required
        Previous value: -[
        -  "enabled",
        -  "subject",
        -  "comparison",
        -  "priceId",
        -  "ticketTypeIds",
        -  "orderBumpProductIds"
        -]New value: +[
        +  "enabled",
        +  "subject",
        +  "comparison",
        +  "priceIds",
        +  "ticketTypeIds",
        +  "orderBumpProductIds"
        +]
    • Changedlist_order_bumps3 fields changed
      • removedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceId
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceIds
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / $defs / OrderBump / properties / showHideLogic / required
        Previous value: -[
        -  "enabled",
        -  "subject",
        -  "comparison",
        -  "priceId",
        -  "ticketTypeIds",
        -  "orderBumpProductIds"
        -]New value: +[
        +  "enabled",
        +  "subject",
        +  "comparison",
        +  "priceIds",
        +  "ticketTypeIds",
        +  "orderBumpProductIds"
        +]
    • Changedreorder_order_bumps3 fields changed
      • removedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceId
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceIds
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / $defs / OrderBump / properties / showHideLogic / required
        Previous value: -[
        -  "enabled",
        -  "subject",
        -  "comparison",
        -  "priceId",
        -  "ticketTypeIds",
        -  "orderBumpProductIds"
        -]New value: +[
        +  "enabled",
        +  "subject",
        +  "comparison",
        +  "priceIds",
        +  "ticketTypeIds",
        +  "orderBumpProductIds"
        +]
    • Changedupdate_order_bump5 fields changed
      • removedInput schema / properties / showHideLogic / properties / priceId
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "pattern": "^[0-9a-fA-F]{24}$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "For `subject: price`: the page product price ID to watch (from get_product). A rule without one is stored but never hides anything."
        -}
      • addedInput schema / properties / showHideLogic / properties / priceIds
        Added value: +{
        +  "description": "For `subject: price`: the page product price IDs to watch (from get_product). The rule matches while the chosen price is any of them, or none of them for `is_not`. A rule without any is stored but never hides anything.",
        +  "items": {
        +    "pattern": "^[0-9a-fA-F]{24}$",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceId
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / $defs / OrderBump / properties / showHideLogic / properties / priceIds
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / $defs / OrderBump / properties / showHideLogic / required
        Previous value: -[
        -  "enabled",
        -  "subject",
        -  "comparison",
        -  "priceId",
        -  "ticketTypeIds",
        -  "orderBumpProductIds"
        -]New value: +[
        +  "enabled",
        +  "subject",
        +  "comparison",
        +  "priceIds",
        +  "ticketTypeIds",
        +  "orderBumpProductIds"
        +]
  7. 5 tool updates
    • Changedcreate_booking2 fields changed
      • addedOutput schema / properties / data / properties / archivedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the merchant archived this, hiding it from their default bookings list in the dashboard. Archiving changes nothing else: the payment, tickets and `orderStatus` stay as they were. Absent unless archived.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / archivedBy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The userId of the team member who archived this. Absent unless archived.",
        +  "type": "string"
        +}
    • Changedget_booking2 fields changed
      • addedOutput schema / properties / data / properties / archivedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the merchant archived this, hiding it from their default bookings list in the dashboard. Archiving changes nothing else: the payment, tickets and `orderStatus` stay as they were. Absent unless archived.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / archivedBy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The userId of the team member who archived this. Absent unless archived.",
        +  "type": "string"
        +}
    • Changedget_payment2 fields changed
      • addedOutput schema / properties / data / properties / archivedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the merchant archived this, hiding it from their default bookings list in the dashboard. Archiving changes nothing else: the payment, tickets and `orderStatus` stay as they were. Absent unless archived.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / archivedBy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The userId of the team member who archived this. Absent unless archived.",
        +  "type": "string"
        +}
    • Changedlist_bookings3 fields changed
      • addedInput schema / properties / archived
        Added value: +{
        +  "description": "Filter by archived bookings. `true` returns only archived bookings, `false` excludes them. Without it the list includes both.",
        +  "enum": [
        +    "true",
        +    "false"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / items / properties / archivedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the merchant archived this, hiding it from their default bookings list in the dashboard. Archiving changes nothing else: the payment, tickets and `orderStatus` stay as they were. Absent unless archived.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / items / properties / archivedBy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The userId of the team member who archived this. Absent unless archived.",
        +  "type": "string"
        +}
    • Changedlist_payments2 fields changed
      • addedOutput schema / properties / data / items / properties / archivedAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the merchant archived this, hiding it from their default bookings list in the dashboard. Archiving changes nothing else: the payment, tickets and `orderStatus` stay as they were. Absent unless archived.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / items / properties / archivedBy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The userId of the team member who archived this. Absent unless archived.",
        +  "type": "string"
        +}
  8. 5 tool updates
    • Changedcreate_booking2 fields changed
      • changedOutput schema / properties / data / properties / orderStatus / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "canceled",
        -      "archived"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "active",
        +      "canceled"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / data / properties / orderStatus / description
        Previous value: -"Order lifecycle status. Valid values are active, canceled, archived."New value: +"Order lifecycle status. Valid values are active, canceled."
    • Changedget_booking2 fields changed
      • changedOutput schema / properties / data / properties / orderStatus / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "canceled",
        -      "archived"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "active",
        +      "canceled"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / data / properties / orderStatus / description
        Previous value: -"Order lifecycle status. Valid values are active, canceled, archived."New value: +"Order lifecycle status. Valid values are active, canceled."
    • Changedget_payment2 fields changed
      • changedOutput schema / properties / data / properties / orderStatus / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "canceled",
        -      "archived"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "active",
        +      "canceled"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / data / properties / orderStatus / description
        Previous value: -"Order lifecycle status. Valid values are active, canceled, archived."New value: +"Order lifecycle status. Valid values are active, canceled."
    • Changedlist_bookings4 fields changed
      • changedInput schema / properties / orderStatus / description
        Previous value: -"Filter by order status. Valid values: archived, active, canceled."New value: +"Filter by order status. Valid values: active, canceled."
      • changedInput schema / properties / orderStatus / enum
        Previous value: -[
        -  "archived",
        -  "active",
        -  "canceled"
        -]New value: +[
        +  "active",
        +  "canceled"
        +]
      • changedOutput schema / properties / data / items / properties / orderStatus / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "canceled",
        -      "archived"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "active",
        +      "canceled"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / data / items / properties / orderStatus / description
        Previous value: -"Order lifecycle status. Valid values are active, canceled, archived."New value: +"Order lifecycle status. Valid values are active, canceled."
    • Changedlist_payments4 fields changed
      • changedInput schema / properties / orderStatus / description
        Previous value: -"Order lifecycle status filter. Valid values: archived, active, canceled."New value: +"Order lifecycle status filter. Valid values: active, canceled."
      • changedInput schema / properties / orderStatus / enum
        Previous value: -[
        -  "archived",
        -  "active",
        -  "canceled"
        -]New value: +[
        +  "active",
        +  "canceled"
        +]
      • changedOutput schema / properties / data / items / properties / orderStatus / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "canceled",
        -      "archived"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "active",
        +      "canceled"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / data / items / properties / orderStatus / description
        Previous value: -"Order lifecycle status. Valid values are active, canceled, archived."New value: +"Order lifecycle status. Valid values are active, canceled."
  9. 5 tool updates
    • Changedcreate_booking1 field changed
      • addedOutput schema / properties / data / properties / paidAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the payment was paid in full. For an invoice or cash payment this is when the merchant recorded the payment, which can be long after `createdAt`. Empty until fully paid, including a deposit with a balance still due."
        +}
    • Changedget_booking1 field changed
      • addedOutput schema / properties / data / properties / paidAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the payment was paid in full. For an invoice or cash payment this is when the merchant recorded the payment, which can be long after `createdAt`. Empty until fully paid, including a deposit with a balance still due."
        +}
    • Changedget_payment1 field changed
      • addedOutput schema / properties / data / properties / paidAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the payment was paid in full. For an invoice or cash payment this is when the merchant recorded the payment, which can be long after `createdAt`. Empty until fully paid, including a deposit with a balance still due."
        +}
    • Changedlist_bookings1 field changed
      • addedOutput schema / properties / data / items / properties / paidAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the payment was paid in full. For an invoice or cash payment this is when the merchant recorded the payment, which can be long after `createdAt`. Empty until fully paid, including a deposit with a balance still due."
        +}
    • Changedlist_payments1 field changed
      • addedOutput schema / properties / data / items / properties / paidAt
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "When the payment was paid in full. For an invoice or cash payment this is when the merchant recorded the payment, which can be long after `createdAt`. Empty until fully paid, including a deposit with a balance still due."
        +}
  10. 12 tool updates
    • Changedcreate_checkout_page4 fields changed
      • addedInput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedcreate_event4 fields changed
      • addedInput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedcreate_form4 fields changed
      • addedInput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedget_checkout_page2 fields changed
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedget_event2 fields changed
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedget_form2 fields changed
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedlist_checkout_pages2 fields changed
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedlist_events2 fields changed
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedlist_forms2 fields changed
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedupdate_checkout_page4 fields changed
      • addedInput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedupdate_event4 fields changed
      • addedInput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
    • Changedupdate_form4 fields changed
      • addedInput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
        Added value: +{
        +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
        +  "type": "boolean"
        +}
  11. 12 tool updates
    • Changedcreate_checkout_page5 fields changed
      • changedInput schema / $defs / PageCheckoutAbandonmentSettingsInput / properties / emailReminders / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "reminder1": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder2": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder3": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "reminder1": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder2": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder3": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation message. Accepts HTML or plaintext."New value: +"Confirmation message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedInput schema / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message. Accepts HTML or plain text."New value: +"Custom confirmation email message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedcreate_event5 fields changed
      • changedInput schema / $defs / PageCheckoutAbandonmentSettingsInput / properties / emailReminders / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "reminder1": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder2": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder3": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "reminder1": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder2": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder3": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation message. Accepts HTML or plaintext."New value: +"Confirmation message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedInput schema / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message. Accepts HTML or plain text."New value: +"Custom confirmation email message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedcreate_form4 fields changed
      • changedInput schema / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation message. Accepts HTML or plaintext."New value: +"Confirmation message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedInput schema / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message. Accepts HTML or plain text."New value: +"Custom confirmation email message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedget_checkout_page2 fields changed
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedget_event2 fields changed
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedget_form2 fields changed
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedlist_checkout_pages2 fields changed
      • changedOutput schema / properties / data / items / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / items / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedlist_events2 fields changed
      • changedOutput schema / properties / data / items / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / items / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedlist_forms2 fields changed
      • changedOutput schema / properties / data / items / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / items / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedupdate_checkout_page5 fields changed
      • changedInput schema / $defs / PageCheckoutAbandonmentSettingsInput / properties / emailReminders / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "reminder1": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder2": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder3": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "reminder1": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder2": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder3": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation message. Accepts HTML or plaintext."New value: +"Confirmation message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedInput schema / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message. Accepts HTML or plain text."New value: +"Custom confirmation email message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedupdate_event5 fields changed
      • changedInput schema / $defs / PageCheckoutAbandonmentSettingsInput / properties / emailReminders / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "reminder1": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder2": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "reminder3": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "body": {
        -                "description": "Email body. Accepts HTML or plain text.",
        -                "example": "<p>You left something behind!</p>",
        -                "type": "string"
        -              },
        -              "buttonText": {
        -                "description": "Email call-to-action button label.",
        -                "example": "Complete order",
        -                "type": "string"
        -              },
        -              "customizeEmail": {
        -                "description": "Enable a custom email for this reminder.",
        -                "example": true,
        -                "type": "boolean"
        -              },
        -              "subject": {
        -                "description": "Email subject line.",
        -                "example": "Complete your purchase",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "customizeEmail"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "reminder1": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder2": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "reminder3": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "body": {
        +                "description": "Email body. Accepts HTML or plain text. Takes the same `{{id}}` variables as `confirmationEmailMessage`, except `amountDue`, `amountPaid`, `currentPeriodEnd`, `status`, `payment_method` and `customer_portal_link`: the customer has not paid yet.",
        +                "example": "<p>You left something behind!</p>",
        +                "type": "string"
        +              },
        +              "buttonText": {
        +                "description": "Email call-to-action button label.",
        +                "example": "Complete order",
        +                "type": "string"
        +              },
        +              "customizeEmail": {
        +                "description": "Enable a custom email for this reminder.",
        +                "example": true,
        +                "type": "boolean"
        +              },
        +              "subject": {
        +                "description": "Email subject line.",
        +                "example": "Complete your purchase",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "customizeEmail"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation message. Accepts HTML or plaintext."New value: +"Confirmation message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedInput schema / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message. Accepts HTML or plain text."New value: +"Custom confirmation email message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • Changedupdate_form4 fields changed
      • changedInput schema / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation message. Accepts HTML or plaintext."New value: +"Confirmation message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedInput schema / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message. Accepts HTML or plain text."New value: +"Custom confirmation email message. Accepts HTML or plain text. Write `{{id}}` where a customer's own details go, and it is filled in for each customer: `{{field_<field id>}}` for their answer to one of the page's fields, `{{variant_<variant id>}}` and `{{variant_<variant id>_sku}}` for their variant choice, or one of `price` (Amount), `amountDue` (Payment amount due), `amountPaid` (Payment amount paid), `currentPeriodEnd` (Next payment date), `planIterations` (No. of payments), `createdAt` (Created date), `status` (Status), `payment_method` (Payment method), `orderId` (Order ID), `product_title` (Product title), `order_summary` (Order summary), `variant_breakdown` (Variant selection), `license_key` (License key), `sku` (SKU), `form_title` (Form title), `event_name` (Event name), `event_date` (Event date/time), `event_location` (Event location), `event_tickets` (Tickets purchased), `booking_fee` (Booking fee), `event_meeting_link` (Virtual meeting link), `customer_portal_link` (Customer portal link), `coupon_code` (Coupon code), `coupon_discount` (Coupon discount). Product, variant, license key and billing variables apply to checkout pages, event variables to events, `form_title` to forms; a variable that does not apply is left blank. To show paragraphs only to some customers, wrap them in `<if variable=\"<id>\" operator=\"<operator>\" value=\"<value>\">...</if>`, with operator one of equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal."
      • changedOutput schema / properties / data / properties / confirmationCheckoutMessage / description
        Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
      • changedOutput schema / properties / data / properties / confirmationEmailMessage / description
        Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
  12. 1 tool update
    • Changedupdate_coupon2 fields changed
      • changedInput schema / properties / pageIds / description
        Previous value: -"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`. Replaces the stored rules with whole-order rules for these pages; an empty array makes the coupon work everywhere. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` or `tickets` rule per page: send `rules` instead."New value: +"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`. Replaces the stored rules with whole-order rules for these pages; an empty array makes the coupon work everywhere. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` rule, or one `tickets` rule with picked `ticketTypeIds`, per page: send `rules` instead."
      • changedInput schema / properties / ticketTypeIds / description
        Previous value: -"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`. Without `pageIds`, checked against the pages already on the coupon. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` or `tickets` rule per page."New value: +"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`. Without `pageIds`, checked against the pages already on the coupon. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` rule, or one `tickets` rule with picked `ticketTypeIds`, per page."
  13. 6 tool updates
    • Changedcreate_coupon10 fields changed
      • addedInput schema / properties / pageIds / deprecated
        Added value: +true
      • changedInput schema / properties / pageIds / description
        Previous value: -"A list of pageIds that this coupon can be used within."New value: +"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`."
      • addedInput schema / properties / rules
        Added value: +{
        +  "description": "Where the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event.",
        +  "example": [
        +    {
        +      "appliesTo": "pricesAndBumps",
        +      "bumpProductIds": [],
        +      "pageId": "67ee075004de439ab0b675b6",
        +      "priceIds": [
        +        "67fcbdac6a91c25ef2d3534a"
        +      ]
        +    }
        +  ],
        +  "items": {
        +    "properties": {
        +      "appliesTo": {
        +        "description": "What the coupon discounts on the page. Checkout pages: `wholeOrder` (the main product at any price and every order bump), `prices` (applies when the customer buys one of `priceIds`, discounting that price only), `pricesAndBumps` (applies only when the customer buys one of `priceIds` and one of `bumpProductIds`, discounting both). Events: `wholeOrder` (every ticket and add-on), `tickets` (applies when the customer buys one of `ticketTypeIds`, discounting those tickets only), `ticketsAndAddOns` (applies only when the customer buys one of `ticketTypeIds` and one of `bumpProductIds`, discounting both). Setup fees and ticket fees follow `appliesToSetupFee` and `appliesToTicketFees`.",
        +        "enum": [
        +          "wholeOrder",
        +          "prices",
        +          "pricesAndBumps",
        +          "tickets",
        +          "ticketsAndAddOns"
        +        ],
        +        "example": "prices",
        +        "type": "string"
        +      },
        +      "bumpProductIds": {
        +        "description": "Products of order bumps (checkout pages) or add-ons (events) on the page, only for `pricesAndBumps` and `ticketsAndAddOns`. An empty list or no list means every bump or add-on on the page, including ones added later; the coupon still needs one of them bought.",
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "pageId": {
        +        "description": "The checkout page or event this rule applies to.",
        +        "pattern": "^[0-9a-fA-F]{24}$",
        +        "type": "string"
        +      },
        +      "priceIds": {
        +        "description": "Prices of the page's main product, only for `prices` and `pricesAndBumps`. An empty list or no list means every price of the main product, including prices added later. These are the `id`s of a product's `prices`, not Stripe price ids.",
        +        "example": [
        +          "67fcbdac6a91c25ef2d3534a"
        +        ],
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ticketTypeIds": {
        +        "description": "Ticket types of the event, only for `tickets` and `ticketsAndAddOns`. An empty list or no list means every ticket type of the event, including ticket types added later.",
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "pageId",
        +      "appliesTo"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / ticketTypeIds / deprecated
        Added value: +true
      • changedInput schema / properties / ticketTypeIds / description
        Previous value: -"List of ticket type IDs that this coupon can be used with. Ticket ticket ids must belong to a page specified in the `pageIds` array."New value: +"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`."
      • addedOutput schema / properties / data / properties / pageIds / deprecated
        Added value: +true
      • addedOutput schema / properties / data / properties / pageIds / description
        Added value: +"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`."
      • addedOutput schema / properties / data / properties / rules
        Added value: +{
        +  "description": "Where the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "appliesTo": {
        +        "description": "What the coupon discounts on the page. Checkout pages: `wholeOrder` (the main product at any price and every order bump), `prices` (applies when the customer buys one of `priceIds`, discounting that price only), `pricesAndBumps` (applies only when the customer buys one of `priceIds` and one of `bumpProductIds`, discounting both). Events: `wholeOrder` (every ticket and add-on), `tickets` (applies when the customer buys one of `ticketTypeIds`, discounting those tickets only), `ticketsAndAddOns` (applies only when the customer buys one of `ticketTypeIds` and one of `bumpProductIds`, discounting both). Setup fees and ticket fees follow `appliesToSetupFee` and `appliesToTicketFees`.",
        +        "enum": [
        +          "wholeOrder",
        +          "prices",
        +          "pricesAndBumps",
        +          "tickets",
        +          "ticketsAndAddOns"
        +        ],
        +        "example": "prices",
        +        "type": "string"
        +      },
        +      "bumpProductIds": {
        +        "description": "Products of order bumps (checkout pages) or add-ons (events) on the page, only for `pricesAndBumps` and `ticketsAndAddOns`. An empty list or no list means every bump or add-on on the page, including ones added later; the coupon still needs one of them bought.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "pageId": {
        +        "description": "The checkout page or event this rule applies to.",
        +        "type": "string"
        +      },
        +      "priceIds": {
        +        "description": "Prices of the page's main product, only for `prices` and `pricesAndBumps`. An empty list or no list means every price of the main product, including prices added later. These are the `id`s of a product's `prices`, not Stripe price ids.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ticketTypeIds": {
        +        "description": "Ticket types of the event, only for `tickets` and `ticketsAndAddOns`. An empty list or no list means every ticket type of the event, including ticket types added later.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "pageId",
        +      "appliesTo",
        +      "priceIds",
        +      "ticketTypeIds",
        +      "bumpProductIds"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / data / properties / ticketTypeIds / deprecated
        Added value: +true
      • changedOutput schema / properties / data / properties / ticketTypeIds / description
        Previous value: -"List of ticket type IDs that this coupon can be used with."New value: +"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`."
    • Changedget_subscription1 field changed
      • changedOutput schema / properties / data / properties / couponSnapshot / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "amountOff": {
        -        "name": "The fixed amount to subtract from the total. Cannot be combined with `percentOff` for the same coupon.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "appliesToSetupFee": {
        -        "description": "Whether the coupon discount applies to the setup fee, if any.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "name": "The coupon code that the customer entered to receive the discount. E.g. `BLACKFRIDAY`.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "name": "The currency code for the coupon. Must match the subscription currency. Required if `amountOff` is set.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "deleted": {
        -        "name": "Whether the coupon is deleted.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "duration": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "once",
        -              "repeating",
        -              "forever"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The duration of the coupon discount. `once` means the discount applies to the first invoice only. `repeating` means the discount applies for a fixed number of billing periods, as specified by `durationInMonths`. `forever` means the discount applies to all invoices until the subscription is canceled."
        -      },
        -      "durationInMonths": {
        -        "name": "If `duration` is `repeating`, the number of billing periods that the discount applies for.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "label": {
        -        "name": "Label for the coupon, such as \"20% off\" or \"$10 off\". This is the label displayed in the dashboard. Not seen by customers.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "maxRedemptions": {
        -        "name": "The maximum number of times the coupon can be redeemed. A coupon can be redeemed by the same customer multiple times.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "pageIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The list of page IDs to which the coupon applies."
        -      },
        -      "percentOff": {
        -        "name": "The percentage to subtract from the total. Cannot be combined with `amountOff` for the same coupon.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "redeemBy": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The date and time when the coupon expires."
        -      },
        -      "timesRedeemed": {
        -        "name": "The number of times the coupon has been redeemed.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "amountOff": {
        +        "name": "The fixed amount to subtract from the total. Cannot be combined with `percentOff` for the same coupon.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "appliesToSetupFee": {
        +        "description": "Whether the coupon discount applies to the setup fee, if any.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "name": "The coupon code that the customer entered to receive the discount. E.g. `BLACKFRIDAY`.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "name": "The currency code for the coupon. Must match the subscription currency. Required if `amountOff` is set.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "deleted": {
        +        "name": "Whether the coupon is deleted.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "duration": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "once",
        +              "repeating",
        +              "forever"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "name": "The duration of the coupon discount. `once` means the discount applies to the first invoice only. `repeating` means the discount applies for a fixed number of billing periods, as specified by `durationInMonths`. `forever` means the discount applies to all invoices until the subscription is canceled."
        +      },
        +      "durationInMonths": {
        +        "name": "If `duration` is `repeating`, the number of billing periods that the discount applies for.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "label": {
        +        "name": "Label for the coupon, such as \"20% off\" or \"$10 off\". This is the label displayed in the dashboard. Not seen by customers.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "maxRedemptions": {
        +        "name": "The maximum number of times the coupon can be redeemed. A coupon can be redeemed by the same customer multiple times.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "pageIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "deprecated": true,
        +        "description": "Deprecated: what a coupon covers is now its `rules`; read them from the coupon (`couponId`). The pages the coupon was limited to when the subscription was bought.",
        +        "name": "The list of page IDs to which the coupon applies."
        +      },
        +      "percentOff": {
        +        "name": "The percentage to subtract from the total. Cannot be combined with `amountOff` for the same coupon.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "redeemBy": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "name": "The date and time when the coupon expires."
        +      },
        +      "timesRedeemed": {
        +        "name": "The number of times the coupon has been redeemed.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_coupons5 fields changed
      • addedOutput schema / properties / data / items / properties / pageIds / deprecated
        Added value: +true
      • addedOutput schema / properties / data / items / properties / pageIds / description
        Added value: +"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`."
      • addedOutput schema / properties / data / items / properties / rules
        Added value: +{
        +  "description": "Where the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "appliesTo": {
        +        "description": "What the coupon discounts on the page. Checkout pages: `wholeOrder` (the main product at any price and every order bump), `prices` (applies when the customer buys one of `priceIds`, discounting that price only), `pricesAndBumps` (applies only when the customer buys one of `priceIds` and one of `bumpProductIds`, discounting both). Events: `wholeOrder` (every ticket and add-on), `tickets` (applies when the customer buys one of `ticketTypeIds`, discounting those tickets only), `ticketsAndAddOns` (applies only when the customer buys one of `ticketTypeIds` and one of `bumpProductIds`, discounting both). Setup fees and ticket fees follow `appliesToSetupFee` and `appliesToTicketFees`.",
        +        "enum": [
        +          "wholeOrder",
        +          "prices",
        +          "pricesAndBumps",
        +          "tickets",
        +          "ticketsAndAddOns"
        +        ],
        +        "example": "prices",
        +        "type": "string"
        +      },
        +      "bumpProductIds": {
        +        "description": "Products of order bumps (checkout pages) or add-ons (events) on the page, only for `pricesAndBumps` and `ticketsAndAddOns`. An empty list or no list means every bump or add-on on the page, including ones added later; the coupon still needs one of them bought.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "pageId": {
        +        "description": "The checkout page or event this rule applies to.",
        +        "type": "string"
        +      },
        +      "priceIds": {
        +        "description": "Prices of the page's main product, only for `prices` and `pricesAndBumps`. An empty list or no list means every price of the main product, including prices added later. These are the `id`s of a product's `prices`, not Stripe price ids.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ticketTypeIds": {
        +        "description": "Ticket types of the event, only for `tickets` and `ticketsAndAddOns`. An empty list or no list means every ticket type of the event, including ticket types added later.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "pageId",
        +      "appliesTo",
        +      "priceIds",
        +      "ticketTypeIds",
        +      "bumpProductIds"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / data / items / properties / ticketTypeIds / deprecated
        Added value: +true
      • changedOutput schema / properties / data / items / properties / ticketTypeIds / description
        Previous value: -"List of ticket type IDs that this coupon can be used with."New value: +"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`."
    • Changedlist_subscriptions1 field changed
      • changedOutput schema / properties / data / items / properties / couponSnapshot / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "amountOff": {
        -        "name": "The fixed amount to subtract from the total. Cannot be combined with `percentOff` for the same coupon.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "appliesToSetupFee": {
        -        "description": "Whether the coupon discount applies to the setup fee, if any.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "name": "The coupon code that the customer entered to receive the discount. E.g. `BLACKFRIDAY`.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "name": "The currency code for the coupon. Must match the subscription currency. Required if `amountOff` is set.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "deleted": {
        -        "name": "Whether the coupon is deleted.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "duration": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "once",
        -              "repeating",
        -              "forever"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The duration of the coupon discount. `once` means the discount applies to the first invoice only. `repeating` means the discount applies for a fixed number of billing periods, as specified by `durationInMonths`. `forever` means the discount applies to all invoices until the subscription is canceled."
        -      },
        -      "durationInMonths": {
        -        "name": "If `duration` is `repeating`, the number of billing periods that the discount applies for.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "label": {
        -        "name": "Label for the coupon, such as \"20% off\" or \"$10 off\". This is the label displayed in the dashboard. Not seen by customers.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "maxRedemptions": {
        -        "name": "The maximum number of times the coupon can be redeemed. A coupon can be redeemed by the same customer multiple times.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "pageIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The list of page IDs to which the coupon applies."
        -      },
        -      "percentOff": {
        -        "name": "The percentage to subtract from the total. Cannot be combined with `amountOff` for the same coupon.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "redeemBy": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The date and time when the coupon expires."
        -      },
        -      "timesRedeemed": {
        -        "name": "The number of times the coupon has been redeemed.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "amountOff": {
        +        "name": "The fixed amount to subtract from the total. Cannot be combined with `percentOff` for the same coupon.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "appliesToSetupFee": {
        +        "description": "Whether the coupon discount applies to the setup fee, if any.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "name": "The coupon code that the customer entered to receive the discount. E.g. `BLACKFRIDAY`.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "name": "The currency code for the coupon. Must match the subscription currency. Required if `amountOff` is set.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "deleted": {
        +        "name": "Whether the coupon is deleted.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "duration": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "once",
        +              "repeating",
        +              "forever"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "name": "The duration of the coupon discount. `once` means the discount applies to the first invoice only. `repeating` means the discount applies for a fixed number of billing periods, as specified by `durationInMonths`. `forever` means the discount applies to all invoices until the subscription is canceled."
        +      },
        +      "durationInMonths": {
        +        "name": "If `duration` is `repeating`, the number of billing periods that the discount applies for.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "label": {
        +        "name": "Label for the coupon, such as \"20% off\" or \"$10 off\". This is the label displayed in the dashboard. Not seen by customers.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "maxRedemptions": {
        +        "name": "The maximum number of times the coupon can be redeemed. A coupon can be redeemed by the same customer multiple times.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "pageIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "deprecated": true,
        +        "description": "Deprecated: what a coupon covers is now its `rules`; read them from the coupon (`couponId`). The pages the coupon was limited to when the subscription was bought.",
        +        "name": "The list of page IDs to which the coupon applies."
        +      },
        +      "percentOff": {
        +        "name": "The percentage to subtract from the total. Cannot be combined with `amountOff` for the same coupon.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "redeemBy": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "name": "The date and time when the coupon expires."
        +      },
        +      "timesRedeemed": {
        +        "name": "The number of times the coupon has been redeemed.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedprepare_subscription_cancellation1 field changed
      • changedOutput schema / properties / data / properties / couponSnapshot / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "amountOff": {
        -        "name": "The fixed amount to subtract from the total. Cannot be combined with `percentOff` for the same coupon.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "appliesToSetupFee": {
        -        "description": "Whether the coupon discount applies to the setup fee, if any.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "code": {
        -        "name": "The coupon code that the customer entered to receive the discount. E.g. `BLACKFRIDAY`.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "currency": {
        -        "name": "The currency code for the coupon. Must match the subscription currency. Required if `amountOff` is set.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "deleted": {
        -        "name": "Whether the coupon is deleted.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "duration": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "once",
        -              "repeating",
        -              "forever"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The duration of the coupon discount. `once` means the discount applies to the first invoice only. `repeating` means the discount applies for a fixed number of billing periods, as specified by `durationInMonths`. `forever` means the discount applies to all invoices until the subscription is canceled."
        -      },
        -      "durationInMonths": {
        -        "name": "If `duration` is `repeating`, the number of billing periods that the discount applies for.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "label": {
        -        "name": "Label for the coupon, such as \"20% off\" or \"$10 off\". This is the label displayed in the dashboard. Not seen by customers.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "maxRedemptions": {
        -        "name": "The maximum number of times the coupon can be redeemed. A coupon can be redeemed by the same customer multiple times.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "pageIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The list of page IDs to which the coupon applies."
        -      },
        -      "percentOff": {
        -        "name": "The percentage to subtract from the total. Cannot be combined with `amountOff` for the same coupon.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "redeemBy": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "name": "The date and time when the coupon expires."
        -      },
        -      "timesRedeemed": {
        -        "name": "The number of times the coupon has been redeemed.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "amountOff": {
        +        "name": "The fixed amount to subtract from the total. Cannot be combined with `percentOff` for the same coupon.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "appliesToSetupFee": {
        +        "description": "Whether the coupon discount applies to the setup fee, if any.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "code": {
        +        "name": "The coupon code that the customer entered to receive the discount. E.g. `BLACKFRIDAY`.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "name": "The currency code for the coupon. Must match the subscription currency. Required if `amountOff` is set.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "deleted": {
        +        "name": "Whether the coupon is deleted.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "duration": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "once",
        +              "repeating",
        +              "forever"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "name": "The duration of the coupon discount. `once` means the discount applies to the first invoice only. `repeating` means the discount applies for a fixed number of billing periods, as specified by `durationInMonths`. `forever` means the discount applies to all invoices until the subscription is canceled."
        +      },
        +      "durationInMonths": {
        +        "name": "If `duration` is `repeating`, the number of billing periods that the discount applies for.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "label": {
        +        "name": "Label for the coupon, such as \"20% off\" or \"$10 off\". This is the label displayed in the dashboard. Not seen by customers.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "maxRedemptions": {
        +        "name": "The maximum number of times the coupon can be redeemed. A coupon can be redeemed by the same customer multiple times.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "pageIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "deprecated": true,
        +        "description": "Deprecated: what a coupon covers is now its `rules`; read them from the coupon (`couponId`). The pages the coupon was limited to when the subscription was bought.",
        +        "name": "The list of page IDs to which the coupon applies."
        +      },
        +      "percentOff": {
        +        "name": "The percentage to subtract from the total. Cannot be combined with `amountOff` for the same coupon.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "redeemBy": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "name": "The date and time when the coupon expires."
        +      },
        +      "timesRedeemed": {
        +        "name": "The number of times the coupon has been redeemed.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_coupon10 fields changed
      • addedInput schema / properties / pageIds / deprecated
        Added value: +true
      • changedInput schema / properties / pageIds / description
        Previous value: -"The pages this coupon can be used on. Replaces the existing list. An empty array clears it, making the coupon valid everywhere."New value: +"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`. Replaces the stored rules with whole-order rules for these pages; an empty array makes the coupon work everywhere. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` or `tickets` rule per page: send `rules` instead."
      • addedInput schema / properties / rules
        Added value: +{
        +  "description": "Where the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event. Replaces every stored rule; an empty list makes the coupon work everywhere.",
        +  "example": [
        +    {
        +      "appliesTo": "wholeOrder",
        +      "pageId": "67ee075004de439ab0b675b6"
        +    }
        +  ],
        +  "items": {
        +    "properties": {
        +      "appliesTo": {
        +        "description": "What the coupon discounts on the page. Checkout pages: `wholeOrder` (the main product at any price and every order bump), `prices` (applies when the customer buys one of `priceIds`, discounting that price only), `pricesAndBumps` (applies only when the customer buys one of `priceIds` and one of `bumpProductIds`, discounting both). Events: `wholeOrder` (every ticket and add-on), `tickets` (applies when the customer buys one of `ticketTypeIds`, discounting those tickets only), `ticketsAndAddOns` (applies only when the customer buys one of `ticketTypeIds` and one of `bumpProductIds`, discounting both). Setup fees and ticket fees follow `appliesToSetupFee` and `appliesToTicketFees`.",
        +        "enum": [
        +          "wholeOrder",
        +          "prices",
        +          "pricesAndBumps",
        +          "tickets",
        +          "ticketsAndAddOns"
        +        ],
        +        "example": "prices",
        +        "type": "string"
        +      },
        +      "bumpProductIds": {
        +        "description": "Products of order bumps (checkout pages) or add-ons (events) on the page, only for `pricesAndBumps` and `ticketsAndAddOns`. An empty list or no list means every bump or add-on on the page, including ones added later; the coupon still needs one of them bought.",
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "pageId": {
        +        "description": "The checkout page or event this rule applies to.",
        +        "pattern": "^[0-9a-fA-F]{24}$",
        +        "type": "string"
        +      },
        +      "priceIds": {
        +        "description": "Prices of the page's main product, only for `prices` and `pricesAndBumps`. An empty list or no list means every price of the main product, including prices added later. These are the `id`s of a product's `prices`, not Stripe price ids.",
        +        "example": [
        +          "67fcbdac6a91c25ef2d3534a"
        +        ],
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ticketTypeIds": {
        +        "description": "Ticket types of the event, only for `tickets` and `ticketsAndAddOns`. An empty list or no list means every ticket type of the event, including ticket types added later.",
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "pageId",
        +      "appliesTo"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / ticketTypeIds / deprecated
        Added value: +true
      • changedInput schema / properties / ticketTypeIds / description
        Previous value: -"The 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."New value: +"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`. Without `pageIds`, checked against the pages already on the coupon. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` or `tickets` rule per page."
      • addedOutput schema / properties / data / properties / pageIds / deprecated
        Added value: +true
      • addedOutput schema / properties / data / properties / pageIds / description
        Added value: +"Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`."
      • addedOutput schema / properties / data / properties / rules
        Added value: +{
        +  "description": "Where the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "appliesTo": {
        +        "description": "What the coupon discounts on the page. Checkout pages: `wholeOrder` (the main product at any price and every order bump), `prices` (applies when the customer buys one of `priceIds`, discounting that price only), `pricesAndBumps` (applies only when the customer buys one of `priceIds` and one of `bumpProductIds`, discounting both). Events: `wholeOrder` (every ticket and add-on), `tickets` (applies when the customer buys one of `ticketTypeIds`, discounting those tickets only), `ticketsAndAddOns` (applies only when the customer buys one of `ticketTypeIds` and one of `bumpProductIds`, discounting both). Setup fees and ticket fees follow `appliesToSetupFee` and `appliesToTicketFees`.",
        +        "enum": [
        +          "wholeOrder",
        +          "prices",
        +          "pricesAndBumps",
        +          "tickets",
        +          "ticketsAndAddOns"
        +        ],
        +        "example": "prices",
        +        "type": "string"
        +      },
        +      "bumpProductIds": {
        +        "description": "Products of order bumps (checkout pages) or add-ons (events) on the page, only for `pricesAndBumps` and `ticketsAndAddOns`. An empty list or no list means every bump or add-on on the page, including ones added later; the coupon still needs one of them bought.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "pageId": {
        +        "description": "The checkout page or event this rule applies to.",
        +        "type": "string"
        +      },
        +      "priceIds": {
        +        "description": "Prices of the page's main product, only for `prices` and `pricesAndBumps`. An empty list or no list means every price of the main product, including prices added later. These are the `id`s of a product's `prices`, not Stripe price ids.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ticketTypeIds": {
        +        "description": "Ticket types of the event, only for `tickets` and `ticketsAndAddOns`. An empty list or no list means every ticket type of the event, including ticket types added later.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "pageId",
        +      "appliesTo",
        +      "priceIds",
        +      "ticketTypeIds",
        +      "bumpProductIds"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / data / properties / ticketTypeIds / deprecated
        Added value: +true
      • changedOutput schema / properties / data / properties / ticketTypeIds / description
        Previous value: -"List of ticket type IDs that this coupon can be used with."New value: +"Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`."
  14. 18 tool updates
    • Changedcreate_checkout_page4 fields changed
      • changedInput schema / $defs / FieldInput / properties / reference / description
        Previous value: -"External reference ID for integration purposes. Generated from the field type or label when omitted."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks."
      • changedInput schema / properties / productData / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "defaultPriceId": {
        -        "description": "ID of the price pre-selected at checkout. Must reference an existing price `id` in `prices[]`. When omitted and there are several prices, checkout opens with none selected so the buyer chooses one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "description": "Description of the product. Accepts HTML or plain text.",
        -        "example": "Join our premium course today learn more at <a href=\"https://checkoutpage.com\">Checkout Page</a>.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "amountOff": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Fixed amount discount in cents. Cannot be used with `percentOff`.",
        -                  "example": 500
        -                },
        -                "maxQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Maximum quantity for this discount tier. Leave empty for no upper limit.",
        -                  "example": 10
        -                },
        -                "minQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Minimum quantity required for this discount to apply.",
        -                  "example": 5
        -                },
        -                "percentOff": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 100,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Percentage discount to apply. Cannot be used with `amountOff`.",
        -                  "example": 10
        -                },
        -                "quantityCondition": {
        -                  "description": "How this bulk discount is triggered. Use `checkout_quantity` to apply the discount based on the total checkout quantity. Use `variant_option_quantity` only when this same request also includes `variants` and matching option `key` values referenced by `variantOptionIds`. Defaults to `checkout_quantity`.",
        -                  "enum": [
        -                    "checkout_quantity",
        -                    "variant_option_quantity"
        -                  ],
        -                  "example": "checkout_quantity",
        -                  "type": "string"
        -                },
        -                "variantOptionIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "properties": {
        -                          "key": {
        -                            "type": "string"
        -                          }
        -                        },
        -                        "required": [
        -                          "key"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Variant option keys that this discount applies to. Only use this when `quantityCondition` is `variant_option_quantity`. Each entry must exactly match a temporary `key` from `variants[].options[].key` in the same request. These keys are caller-defined handles that are resolved to MongoDB ObjectIds at save time and do not appear in the response."
        -                }
        -              },
        -              "required": [
        -                "quantityCondition"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Bulk discounts for the product.\n\nUse `checkout_quantity` when the discount should apply to the total checkout quantity.\n\nUse `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:\n1. Include `productData.variants`.\n2. Give each target variant option a temporary `key` in `variants[].options[].key`.\n3. Reference those exact keys in `discounts[].variantOptionIds[].key`.\n\n- `variants[].options`: [{ name: \"Red\", key: \"red\" }, { name: \"Blue\", key: \"blue\" }]\n- `discounts`: [{ quantityCondition: \"variant_option_quantity\", variantOptionIds: [{ key: \"red\" }, { key: \"blue\" }], minQuantity: 3, percentOff: 10 }]\n\n[Learn more](https://checkoutpage.com/docs/articles/bulk-discounts)",
        -        "example": [
        -          {
        -            "minQuantity": 3,
        -            "percentOff": 10,
        -            "quantityCondition": "variant_option_quantity",
        -            "variantOptionIds": [
        -              {
        -                "key": "red"
        -              },
        -              {
        -                "key": "blue"
        -              }
        -            ]
        -          }
        -        ]
        -      },
        -      "enableFileAccessForInactiveSubscriptions": {
        -        "description": "Allow customers with inactive subscriptions to keep accessing file downloads.",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "fileIds": {
        -        "description": "Files for the product. Available to the customer after purchase.",
        -        "example": [
        -          "507f1f77bcf86cd799439011"
        -        ],
        -        "items": {
        -          "pattern": "^[0-9a-fA-F]{24}$",
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "List of Tax Rate IDs applied to this product. When the page's `tax.mode` is `fixed` and this is omitted on create, the seller default rate is applied. Call `list_tax_rates` first to find an existing rate; use `create_tax_rate` to add a new one."
        -      },
        -      "generateLicenseKeys": {
        -        "description": "If true, on purchase a license key for the product is generated",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "hasUnlimitedStock": {
        -        "description": "Whether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "imageIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Images for the product. Provide a list of image file IDs. Use the `/files/upload` API to add images.",
        -        "example": [
        -          "507f1f77bcf86cd799439011"
        -        ]
        -      },
        -      "limitPayments": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "description": "Prevent a customer who has already paid for this product from paying again. One-time payments only. Defaults to `false`.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        -      },
        -      "limitSubscriptions": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "description": "Enable subscription limits. Defaults to `false`.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "limitSubscriptionsStripe": {
        -                "anyOf": [
        -                  {
        -                    "properties": {
        -                      "enabled": {
        -                        "description": "Enable Stripe-level subscription limits (checks active subscriptions in Stripe). Defaults to `false`.",
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Stripe-specific subscription limit configuration."
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Configuration to limit the number of active subscriptions for this product. Used to cap subscriptions to a specific number."
        -      },
        -      "price": {
        -        "description": "The singular way to set a product price — equivalent to `prices: [entry]` and materialized as one. When `prices` is also provided it takes precedence and `price` is ignored. On update, `price` is only valid while the product has at most one price (a legacy product transitions to `prices[]` on first use); products with multiple prices must be updated through `prices[]`.",
        -        "properties": {
        -          "amount": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Price in smallest currency unit (cents). Defaults to `0`.",
        -            "example": 4900
        -          },
        -          "badge": {
        -            "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "badgeIcon": {
        -            "anyOf": [
        -              {
        -                "description": "Icon shown before the badge text.",
        -                "enum": [
        -                  "star",
        -                  "sparkles",
        -                  "fire",
        -                  "bolt",
        -                  "rocket",
        -                  "trophy",
        -                  "check",
        -                  "x-mark",
        -                  "plus",
        -                  "arrow-right",
        -                  "check-badge",
        -                  "check-circle",
        -                  "shield-check",
        -                  "thumbs-up",
        -                  "heart",
        -                  "smile",
        -                  "light-bulb",
        -                  "sun",
        -                  "moon",
        -                  "gift",
        -                  "tag",
        -                  "percent",
        -                  "dollar",
        -                  "banknotes",
        -                  "credit-card",
        -                  "shopping-bag",
        -                  "shopping-cart",
        -                  "truck",
        -                  "clock",
        -                  "calendar",
        -                  "bell",
        -                  "megaphone",
        -                  "trending-up",
        -                  "chart",
        -                  "refresh",
        -                  "lock",
        -                  "key",
        -                  "ticket",
        -                  "users",
        -                  "academic-cap",
        -                  "book",
        -                  "music",
        -                  "video",
        -                  "document",
        -                  "download",
        -                  "mobile",
        -                  "camera",
        -                  "paint-brush",
        -                  "puzzle",
        -                  "cube",
        -                  "globe",
        -                  "map-pin",
        -                  "storefront",
        -                  "tools",
        -                  "beaker",
        -                  "lifebuoy",
        -                  "chat",
        -                  "envelope",
        -                  "phone",
        -                  "cake",
        -                  "scale",
        -                  "eye"
        -                ],
        -                "example": "star",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Optional icon shown before the badge text. `null` removes it."
        -          },
        -          "billingType": {
        -            "anyOf": [
        -              {
        -                "enum": [
        -                  "one_time",
        -                  "recurring"
        -                ],
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Billing type. Derived when omitted: `recurring`/`paymentPlan` present → recurring, else one_time. Part of the pricing-type identity fixed at creation — cannot change on an existing price."
        -          },
        -          "currency": {
        -            "anyOf": [
        -              {
        -                "maxLength": 3,
        -                "minLength": 3,
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Currency code (lowercase). Defaults to `usd`.",
        -            "example": "usd"
        -          },
        -          "discountedFromPrice": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "The original price of the product in the smallest currency unit (cents).",
        -            "example": 9900
        -          },
        -          "enabled": {
        -            "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "hidden": {
        -            "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "id": {
        -            "description": "Existing price id (omit when creating a new price).",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "label": {
        -            "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "order": {
        -            "description": "Dashboard display order. Lower numbers appear first.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "payWhatYouWant": {
        -            "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "paymentPlan": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        -                            "example": 1
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval for subscriptions.",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 1,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1
        -                  },
        -                  "planIterations": {
        -                    "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -                    "example": 3,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins.",
        -                    "example": "2026-02-25T06:40:09.463Z"
        -                  },
        -                  "trialPeriodDays": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Trial period in days for subscriptions."
        -                  }
        -                },
        -                "required": [
        -                  "planIterations"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        -          },
        -          "pricingType": {
        -            "anyOf": [
        -              {
        -                "description": "Pricing type for this product - single price or multiple prices using variants.",
        -                "enum": [
        -                  "single",
        -                  "multiple"
        -                ],
        -                "example": "single",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "deprecated": true,
        -            "description": "Deprecated — superseded by `prices[]`. Accepted and ignored.",
        -            "example": "single"
        -          },
        -          "pwywSuggestedPrice": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        -            "example": 2500
        -          },
        -          "recurring": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        -                            "example": 1
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval for subscriptions.",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 1,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins.",
        -                    "example": "2026-02-25T06:40:09.463Z"
        -                  },
        -                  "trialPeriodDays": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Trial period in days for subscriptions."
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "The recurring components of a price such as `interval` and `intervalCount`"
        -          },
        -          "reference": {
        -            "description": "Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference.",
        -            "example": "price_one_time_fixed_5000",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "setupFee": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "One-time setup fee in cents."
        -          },
        -          "setupFeeMultipliesWithQuantity": {
        -            "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        -            "example": false,
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "pricePicker": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "description": {
        -                "description": "Text shown under the heading, above the price options. Line breaks are kept.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "priceDisplayDefaults": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "type": "string"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Per-axis default tab selection. Keyed by grouping axis. E.g. `{ interval: \"Monthly\" }`."
        -              },
        -              "priceDisplayLabels": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "additionalProperties": {
        -                        "type": "string"
        -                      },
        -                      "propertyNames": {
        -                        "type": "string"
        -                      },
        -                      "type": "object"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Per-axis label overrides for price tabs. Keyed by grouping axis (`billing` or `interval`), then by derived group name. E.g. `{ interval: { \"One-time\": \"Lifetime\" } }`."
        -              },
        -              "priceDisplayTabOrder": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Per-axis tab display order. Keyed by grouping axis, value is ordered array of group names. E.g. `{ interval: [\"Monthly\", \"Yearly\"] }`."
        -              },
        -              "shortenDescription": {
        -                "description": "Cut long price descriptions to their first lines behind a Show more link. Defaults to `true`.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "title": {
        -                "description": "Heading shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        -      },
        -      "prices": {
        -        "description": "Explicit price list for this product. When provided alongside variants, use `variant.priceIds` to scope each variant group to its price. At least one entry must be enabled. When present, `prices[]` takes precedence over the legacy `price` field for determining what is shown at checkout.\n\nExample — one-time + monthly subscription:\n```json\n[\n  { \"billingType\": \"one_time\", \"amount\": 4900, \"currency\": \"usd\", \"label\": \"One-time\" },\n  { \"billingType\": \"recurring\", \"amount\": 1000, \"currency\": \"usd\", \"label\": \"Monthly\", \"recurring\": { \"interval\": \"month\", \"intervalCount\": 1 } }\n]\n```",
        -        "example": [
        -          {
        -            "amount": 4900,
        -            "billingType": "one_time",
        -            "currency": "usd",
        -            "label": "One-time"
        -          },
        -          {
        -            "amount": 1000,
        -            "billingType": "recurring",
        -            "currency": "usd",
        -            "label": "Monthly",
        -            "recurring": {
        -              "interval": "month",
        -              "intervalCount": 1
        -            }
        -          }
        -        ],
        -        "items": {
        -          "properties": {
        -            "amount": {
        -              "description": "Price in smallest currency unit (cents).",
        -              "example": 4900,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "badge": {
        -              "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "badgeIcon": {
        -              "anyOf": [
        -                {
        -                  "description": "Icon shown before the badge text.",
        -                  "enum": [
        -                    "star",
        -                    "sparkles",
        -                    "fire",
        -                    "bolt",
        -                    "rocket",
        -                    "trophy",
        -                    "check",
        -                    "x-mark",
        -                    "plus",
        -                    "arrow-right",
        -                    "check-badge",
        -                    "check-circle",
        -                    "shield-check",
        -                    "thumbs-up",
        -                    "heart",
        -                    "smile",
        -                    "light-bulb",
        -                    "sun",
        -                    "moon",
        -                    "gift",
        -                    "tag",
        -                    "percent",
        -                    "dollar",
        -                    "banknotes",
        -                    "credit-card",
        -                    "shopping-bag",
        -                    "shopping-cart",
        -                    "truck",
        -                    "clock",
        -                    "calendar",
        -                    "bell",
        -                    "megaphone",
        -                    "trending-up",
        -                    "chart",
        -                    "refresh",
        -                    "lock",
        -                    "key",
        -                    "ticket",
        -                    "users",
        -                    "academic-cap",
        -                    "book",
        -                    "music",
        -                    "video",
        -                    "document",
        -                    "download",
        -                    "mobile",
        -                    "camera",
        -                    "paint-brush",
        -                    "puzzle",
        -                    "cube",
        -                    "globe",
        -                    "map-pin",
        -                    "storefront",
        -                    "tools",
        -                    "beaker",
        -                    "lifebuoy",
        -                    "chat",
        -                    "envelope",
        -                    "phone",
        -                    "cake",
        -                    "scale",
        -                    "eye"
        -                  ],
        -                  "example": "star",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Optional icon shown before the badge text. `null` removes it."
        -            },
        -            "billingType": {
        -              "description": "Billing type. Part of the pricing-type identity fixed at creation — cannot change on an existing price.",
        -              "enum": [
        -                "one_time",
        -                "recurring"
        -              ],
        -              "example": "one_time",
        -              "type": "string"
        -            },
        -            "currency": {
        -              "anyOf": [
        -                {
        -                  "maxLength": 3,
        -                  "minLength": 3,
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Currency code (lowercase). Defaults to `usd`.",
        -              "example": "usd"
        -            },
        -            "discountedFromPrice": {
        -              "anyOf": [
        -                {
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The original price of the product in the smallest currency unit (cents).",
        -              "example": 9900
        -            },
        -            "enabled": {
        -              "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "hidden": {
        -              "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "Existing price id (omit when creating a new price).",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "label": {
        -              "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "order": {
        -              "description": "Dashboard display order. Lower numbers appear first.",
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "payWhatYouWant": {
        -              "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "paymentPlan": {
        -              "anyOf": [
        -                {
        -                  "properties": {
        -                    "billingCycleAnchorConfig": {
        -                      "anyOf": [
        -                        {
        -                          "properties": {
        -                            "dayOfMonth": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 31,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ],
        -                              "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        -                              "example": 1
        -                            },
        -                            "enabled": {
        -                              "type": [
        -                                "boolean",
        -                                "null"
        -                              ]
        -                            },
        -                            "month": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 12,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ]
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "interval": {
        -                      "anyOf": [
        -                        {
        -                          "enum": [
        -                            "day",
        -                            "week",
        -                            "month",
        -                            "year"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Billing interval for subscriptions.",
        -                      "example": "month"
        -                    },
        -                    "intervalCount": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Number of intervals between billings.",
        -                      "example": 1
        -                    },
        -                    "planIterations": {
        -                      "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -                      "example": 3,
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    "startDate": {
        -                      "anyOf": [
        -                        {
        -                          "format": "date-time",
        -                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date on which the subscription begins.",
        -                      "example": "2026-02-25T06:40:09.463Z"
        -                    },
        -                    "trialPeriodDays": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 0,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Trial period in days for subscriptions."
        -                    }
        -                  },
        -                  "required": [
        -                    "planIterations"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        -            },
        -            "pwywSuggestedPrice": {
        -              "anyOf": [
        -                {
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        -              "example": 2500
        -            },
        -            "recurring": {
        -              "anyOf": [
        -                {
        -                  "properties": {
        -                    "billingCycleAnchorConfig": {
        -                      "anyOf": [
        -                        {
        -                          "properties": {
        -                            "dayOfMonth": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 31,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ],
        -                              "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        -                              "example": 1
        -                            },
        -                            "enabled": {
        -                              "type": [
        -                                "boolean",
        -                                "null"
        -                              ]
        -                            },
        -                            "month": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 12,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ]
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "interval": {
        -                      "anyOf": [
        -                        {
        -                          "enum": [
        -                            "day",
        -                            "week",
        -                            "month",
        -                            "year"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Billing interval for subscriptions.",
        -                      "example": "month"
        -                    },
        -                    "intervalCount": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Number of intervals between billings.",
        -                      "example": 1
        -                    },
        -                    "startDate": {
        -                      "anyOf": [
        -                        {
        -                          "format": "date-time",
        -                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date on which the subscription begins.",
        -                      "example": "2026-02-25T06:40:09.463Z"
        -                    },
        -                    "trialPeriodDays": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 0,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Trial period in days for subscriptions."
        -                    }
        -                  },
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The recurring components of a price such as `interval` and `intervalCount`"
        -            },
        -            "reference": {
        -              "description": "Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference.",
        -              "example": "price_one_time_fixed_5000",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "setupFee": {
        -              "anyOf": [
        -                {
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "One-time setup fee in cents."
        -            },
        -            "setupFeeMultipliesWithQuantity": {
        -              "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        -              "example": false,
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            }
        -          },
        -          "required": [
        -            "amount",
        -            "billingType"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "sku": {
        -        "anyOf": [
        -          {
        -            "maxLength": 200,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "SKU of the product."
        -      },
        -      "stock": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Available stock of the product.",
        -        "example": 100
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "example": "exclusive",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "If Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.",
        -        "example": ""
        -      },
        -      "taxCode": {
        -        "anyOf": [
        -          {
        -            "pattern": "^(txcd_[a-zA-Z0-9]+)?$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "If Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings."
        -      },
        -      "title": {
        -        "anyOf": [
        -          {
        -            "maxLength": 200,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product title. Defaults to page name if not provided.",
        -        "example": "Premium Course"
        -      },
        -      "variants": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "hidden": {
        -                  "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "increasesWithQuantity": {
        -                  "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "key": {
        -                  "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
        -                  "example": "select-package-tier",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "layout": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "collapseVariantOptions": {
        -                          "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
        -                          "example": false,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "imageSize": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "small",
        -                                "medium",
        -                                "large",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Size of variant option images. Defaults to `small`.",
        -                          "example": "small"
        -                        },
        -                        "showPwywPlaceholder": {
        -                          "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantName": {
        -                          "description": "Show the variant name. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionNames": {
        -                          "description": "Show variant option names. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPriceSign": {
        -                          "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPrices": {
        -                          "description": "Show variant option prices. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "spacing": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "comfortable",
        -                                "compact",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Spacing between variant options. Defaults to `comfortable`.",
        -                          "example": "comfortable"
        -                        },
        -                        "textAlign": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "left",
        -                                "center",
        -                                "stack",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Text alignment for variant options. Defaults to `left`.",
        -                          "example": "left"
        -                        },
        -                        "variantOptionColumns": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 10,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Number of columns for grid layout. Defaults to `2`.",
        -                          "example": 2
        -                        },
        -                        "variantOptionLayout": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "list",
        -                                "grid"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Layout style for variant options. Defaults to `list`.",
        -                          "example": "list"
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Layout configuration for this variant."
        -                },
        -                "manageVariantOptionStock": {
        -                  "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "description": "Name of the variant.",
        -                  "example": "Plan Type",
        -                  "type": "string"
        -                },
        -                "options": {
        -                  "description": "Options within this variant. Variant must have at least one option.",
        -                  "items": {
        -                    "properties": {
        -                      "additionalChargeAmount": {
        -                        "description": "The additional charge for selecting this variant option in cents.",
        -                        "example": 1000,
        -                        "type": [
        -                          "number",
        -                          "null"
        -                        ]
        -                      },
        -                      "description": {
        -                        "description": "Description of the variant option. Supports HTML or plain text.",
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "discountedFromPrice": {
        -                        "anyOf": [
        -                          {
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "The original price of this variant option in cents.",
        -                        "example": 1500
        -                      },
        -                      "fileIds": {
        -                        "anyOf": [
        -                          {
        -                            "items": {
        -                              "pattern": "^[0-9a-fA-F]{24}$",
        -                              "type": "string"
        -                            },
        -                            "type": "array"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Files specific to this variant option. Available to the customer after purchase."
        -                      },
        -                      "imageId": {
        -                        "anyOf": [
        -                          {
        -                            "pattern": "^[0-9a-fA-F]{24}$",
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ]
        -                      },
        -                      "key": {
        -                        "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
        -                        "example": "pro-option",
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "name": {
        -                        "description": "Name of the variant option.",
        -                        "example": "Basic",
        -                        "type": "string"
        -                      },
        -                      "payWhatYouWant": {
        -                        "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
        -                        "example": false,
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      },
        -                      "pwywSuggestedPrice": {
        -                        "anyOf": [
        -                          {
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
        -                        "example": 2500
        -                      },
        -                      "sku": {
        -                        "description": "SKU for this option.",
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "status": {
        -                        "anyOf": [
        -                          {
        -                            "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                            "enum": [
        -                              "enabled",
        -                              "disabled",
        -                              "deleted"
        -                            ],
        -                            "example": "enabled",
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Status of the variant option. Defaults to `enabled`.",
        -                        "example": "enabled"
        -                      },
        -                      "stock": {
        -                        "description": "Stock quantity for this option.",
        -                        "example": 10,
        -                        "type": [
        -                          "number",
        -                          "null"
        -                        ]
        -                      },
        -                      "type": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "one_time",
        -                              "recurring"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
        -                        "example": "one_time"
        -                      }
        -                    },
        -                    "required": [
        -                      "name"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "minItems": 1,
        -                  "type": "array"
        -                },
        -                "order": {
        -                  "description": "Display order of the variant. Defaults to `0`.",
        -                  "example": 0,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "preselect": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "enabled": {
        -                          "description": "Enable preselecting a variant option. Defaults to `false`.",
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "optionId": {
        -                          "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
        -                          "example": "pro-option",
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        },
        -                        "quantity": {
        -                          "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
        -                          "example": 2,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Preselect configuration for this variant.",
        -                  "example": {
        -                    "enabled": true,
        -                    "optionId": "pro-option",
        -                    "quantity": 1
        -                  }
        -                },
        -                "priceIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
        -                  "example": [
        -                    "507f1f77bcf86cd799439011"
        -                  ]
        -                },
        -                "reference": {
        -                  "anyOf": [
        -                    {
        -                      "maxLength": 36,
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "External reference ID. Generated from the variant name when omitted.",
        -                  "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
        -                },
        -                "required": {
        -                  "description": "Whether the customer must select at least one option in the variant.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "selectionType": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -                      "enum": [
        -                        "single",
        -                        "multiple",
        -                        "quantity"
        -                      ],
        -                      "example": "single",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
        -                  "example": "single"
        -                },
        -                "showHideLogic": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "comparison": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "is",
        -                                "is_not",
        -                                "is_empty",
        -                                "is_not_empty",
        -                                "contains"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
        -                          "example": "is"
        -                        },
        -                        "element": {
        -                          "anyOf": [
        -                            {
        -                              "properties": {
        -                                "elementId": {
        -                                  "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
        -                                  "example": "select-package-tier",
        -                                  "type": [
        -                                    "string",
        -                                    "null"
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Element (variant) to compare against."
        -                        },
        -                        "enabled": {
        -                          "description": "Enable conditional show/hide logic. Defaults to `false`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "value": {
        -                          "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
        -                          "example": "pro-option",
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Conditional logic to show or hide this variant based on other form elements."
        -                },
        -                "status": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                      "enum": [
        -                        "enabled",
        -                        "disabled",
        -                        "deleted"
        -                      ],
        -                      "example": "enabled",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Status of the variant. Defaults to `enabled`",
        -                  "example": "enabled"
        -                },
        -                "useVariantOptionSkus": {
        -                  "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "name",
        -                "options"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product variants and options. To link a discount to specific variant options, assign a `key` to each relevant option here and reference those keys in `discounts[].variantOptionIds[].key` within the same request."
        -      },
        -      "variantsRequired": {
        -        "description": "Use 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`.",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "defaultPriceId": {
        +        "description": "ID of the price pre-selected at checkout. Must reference an existing price `id` in `prices[]`. When omitted and there are several prices, checkout opens with none selected so the buyer chooses one.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "description": "Description of the product. Accepts HTML or plain text.",
        +        "example": "Join our premium course today learn more at <a href=\"https://checkoutpage.com\">Checkout Page</a>.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "amountOff": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Fixed amount discount in cents. Cannot be used with `percentOff`.",
        +                  "example": 500
        +                },
        +                "maxQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Maximum quantity for this discount tier. Leave empty for no upper limit.",
        +                  "example": 10
        +                },
        +                "minQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Minimum quantity required for this discount to apply.",
        +                  "example": 5
        +                },
        +                "percentOff": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 100,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Percentage discount to apply. Cannot be used with `amountOff`.",
        +                  "example": 10
        +                },
        +                "quantityCondition": {
        +                  "description": "How this bulk discount is triggered. Use `checkout_quantity` to apply the discount based on the total checkout quantity. Use `variant_option_quantity` only when this same request also includes `variants` and matching option `key` values referenced by `variantOptionIds`. Defaults to `checkout_quantity`.",
        +                  "enum": [
        +                    "checkout_quantity",
        +                    "variant_option_quantity"
        +                  ],
        +                  "example": "checkout_quantity",
        +                  "type": "string"
        +                },
        +                "variantOptionIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "properties": {
        +                          "key": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "key"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Variant option keys that this discount applies to. Only use this when `quantityCondition` is `variant_option_quantity`. Each entry must exactly match a temporary `key` from `variants[].options[].key` in the same request. These keys are caller-defined handles that are resolved to MongoDB ObjectIds at save time and do not appear in the response."
        +                }
        +              },
        +              "required": [
        +                "quantityCondition"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Bulk discounts for the product.\n\nUse `checkout_quantity` when the discount should apply to the total checkout quantity.\n\nUse `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:\n1. Include `productData.variants`.\n2. Give each target variant option a temporary `key` in `variants[].options[].key`.\n3. Reference those exact keys in `discounts[].variantOptionIds[].key`.\n\n- `variants[].options`: [{ name: \"Red\", key: \"red\" }, { name: \"Blue\", key: \"blue\" }]\n- `discounts`: [{ quantityCondition: \"variant_option_quantity\", variantOptionIds: [{ key: \"red\" }, { key: \"blue\" }], minQuantity: 3, percentOff: 10 }]\n\n[Learn more](https://checkoutpage.com/docs/articles/bulk-discounts)",
        +        "example": [
        +          {
        +            "minQuantity": 3,
        +            "percentOff": 10,
        +            "quantityCondition": "variant_option_quantity",
        +            "variantOptionIds": [
        +              {
        +                "key": "red"
        +              },
        +              {
        +                "key": "blue"
        +              }
        +            ]
        +          }
        +        ]
        +      },
        +      "enableFileAccessForInactiveSubscriptions": {
        +        "description": "Allow customers with inactive subscriptions to keep accessing file downloads.",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "fileIds": {
        +        "description": "Files for the product. Available to the customer after purchase.",
        +        "example": [
        +          "507f1f77bcf86cd799439011"
        +        ],
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "List of Tax Rate IDs applied to this product. When the page's `tax.mode` is `fixed` and this is omitted on create, the seller default rate is applied. Call `list_tax_rates` first to find an existing rate; use `create_tax_rate` to add a new one."
        +      },
        +      "generateLicenseKeys": {
        +        "description": "If true, on purchase a license key for the product is generated",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "hasUnlimitedStock": {
        +        "description": "Whether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "imageIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Images for the product. Provide a list of image file IDs. Use the `/files/upload` API to add images.",
        +        "example": [
        +          "507f1f77bcf86cd799439011"
        +        ]
        +      },
        +      "limitPayments": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "description": "Prevent a customer who has already paid for this product from paying again. One-time payments only. Defaults to `false`.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        +      },
        +      "limitSubscriptions": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "description": "Enable subscription limits. Defaults to `false`.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "limitSubscriptionsStripe": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "enabled": {
        +                        "description": "Enable Stripe-level subscription limits (checks active subscriptions in Stripe). Defaults to `false`.",
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Stripe-specific subscription limit configuration."
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Configuration to limit the number of active subscriptions for this product. Used to cap subscriptions to a specific number."
        +      },
        +      "price": {
        +        "description": "The singular way to set a product price — equivalent to `prices: [entry]` and materialized as one. When `prices` is also provided it takes precedence and `price` is ignored. On update, `price` is only valid while the product has at most one price (a legacy product transitions to `prices[]` on first use); products with multiple prices must be updated through `prices[]`.",
        +        "properties": {
        +          "amount": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Price in smallest currency unit (cents). Defaults to `0`.",
        +            "example": 4900
        +          },
        +          "badge": {
        +            "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "badgeIcon": {
        +            "anyOf": [
        +              {
        +                "description": "Icon shown before the badge text.",
        +                "enum": [
        +                  "star",
        +                  "sparkles",
        +                  "fire",
        +                  "bolt",
        +                  "rocket",
        +                  "trophy",
        +                  "check",
        +                  "x-mark",
        +                  "plus",
        +                  "arrow-right",
        +                  "check-badge",
        +                  "check-circle",
        +                  "shield-check",
        +                  "thumbs-up",
        +                  "heart",
        +                  "smile",
        +                  "light-bulb",
        +                  "sun",
        +                  "moon",
        +                  "gift",
        +                  "tag",
        +                  "percent",
        +                  "dollar",
        +                  "banknotes",
        +                  "credit-card",
        +                  "shopping-bag",
        +                  "shopping-cart",
        +                  "truck",
        +                  "clock",
        +                  "calendar",
        +                  "bell",
        +                  "megaphone",
        +                  "trending-up",
        +                  "chart",
        +                  "refresh",
        +                  "lock",
        +                  "key",
        +                  "ticket",
        +                  "users",
        +                  "academic-cap",
        +                  "book",
        +                  "music",
        +                  "video",
        +                  "document",
        +                  "download",
        +                  "mobile",
        +                  "camera",
        +                  "paint-brush",
        +                  "puzzle",
        +                  "cube",
        +                  "globe",
        +                  "map-pin",
        +                  "storefront",
        +                  "tools",
        +                  "beaker",
        +                  "lifebuoy",
        +                  "chat",
        +                  "envelope",
        +                  "phone",
        +                  "cake",
        +                  "scale",
        +                  "eye"
        +                ],
        +                "example": "star",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional icon shown before the badge text. `null` removes it."
        +          },
        +          "billingType": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "one_time",
        +                  "recurring"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Billing type. Derived when omitted: `recurring`/`paymentPlan` present → recurring, else one_time. Part of the pricing-type identity fixed at creation — cannot change on an existing price."
        +          },
        +          "currency": {
        +            "anyOf": [
        +              {
        +                "maxLength": 3,
        +                "minLength": 3,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Currency code (lowercase). Defaults to `usd`.",
        +            "example": "usd"
        +          },
        +          "discountedFromPrice": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The original price of the product in the smallest currency unit (cents).",
        +            "example": 9900
        +          },
        +          "enabled": {
        +            "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "hidden": {
        +            "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "description": "Existing price id (omit when creating a new price).",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "label": {
        +            "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "order": {
        +            "description": "Dashboard display order. Lower numbers appear first.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "payWhatYouWant": {
        +            "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "paymentPlan": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                            "example": 1
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval for subscriptions.",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 1,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1
        +                  },
        +                  "planIterations": {
        +                    "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +                    "example": 3,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins.",
        +                    "example": "2026-02-25T06:40:09.463Z"
        +                  },
        +                  "trialPeriodDays": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Trial period in days for subscriptions."
        +                  }
        +                },
        +                "required": [
        +                  "planIterations"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        +          },
        +          "pricingType": {
        +            "anyOf": [
        +              {
        +                "description": "Pricing type for this product - single price or multiple prices using variants.",
        +                "enum": [
        +                  "single",
        +                  "multiple"
        +                ],
        +                "example": "single",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "deprecated": true,
        +            "description": "Deprecated — superseded by `prices[]`. Accepted and ignored.",
        +            "example": "single"
        +          },
        +          "pwywSuggestedPrice": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        +            "example": 2500
        +          },
        +          "recurring": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                            "example": 1
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval for subscriptions.",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 1,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins.",
        +                    "example": "2026-02-25T06:40:09.463Z"
        +                  },
        +                  "trialPeriodDays": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Trial period in days for subscriptions."
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The recurring components of a price such as `interval` and `intervalCount`"
        +          },
        +          "reference": {
        +            "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong.",
        +            "example": "complete-bundle",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "setupFee": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-time setup fee in cents."
        +          },
        +          "setupFeeMultipliesWithQuantity": {
        +            "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        +            "example": false,
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "pricePicker": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "description": {
        +                "description": "Text shown under the heading, above the price options. Line breaks are kept.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "priceDisplayDefaults": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "string"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Per-axis default tab selection. Keyed by grouping axis. E.g. `{ interval: \"Monthly\" }`."
        +              },
        +              "priceDisplayLabels": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Per-axis label overrides for price tabs. Keyed by grouping axis (`billing` or `interval`), then by derived group name. E.g. `{ interval: { \"One-time\": \"Lifetime\" } }`."
        +              },
        +              "priceDisplayTabOrder": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Per-axis tab display order. Keyed by grouping axis, value is ordered array of group names. E.g. `{ interval: [\"Monthly\", \"Yearly\"] }`."
        +              },
        +              "shortenDescription": {
        +                "description": "Cut long price descriptions to their first lines behind a Show more link. Defaults to `true`.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "Heading shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        +      },
        +      "prices": {
        +        "description": "Explicit price list for this product. When provided alongside variants, use `variant.priceIds` to scope each variant group to its price. At least one entry must be enabled. When present, `prices[]` takes precedence over the legacy `price` field for determining what is shown at checkout.\n\nExample — one-time + monthly subscription:\n```json\n[\n  { \"billingType\": \"one_time\", \"amount\": 4900, \"currency\": \"usd\", \"label\": \"One-time\" },\n  { \"billingType\": \"recurring\", \"amount\": 1000, \"currency\": \"usd\", \"label\": \"Monthly\", \"recurring\": { \"interval\": \"month\", \"intervalCount\": 1 } }\n]\n```",
        +        "example": [
        +          {
        +            "amount": 4900,
        +            "billingType": "one_time",
        +            "currency": "usd",
        +            "label": "One-time"
        +          },
        +          {
        +            "amount": 1000,
        +            "billingType": "recurring",
        +            "currency": "usd",
        +            "label": "Monthly",
        +            "recurring": {
        +              "interval": "month",
        +              "intervalCount": 1
        +            }
        +          }
        +        ],
        +        "items": {
        +          "properties": {
        +            "amount": {
        +              "description": "Price in smallest currency unit (cents).",
        +              "example": 4900,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "badge": {
        +              "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "badgeIcon": {
        +              "anyOf": [
        +                {
        +                  "description": "Icon shown before the badge text.",
        +                  "enum": [
        +                    "star",
        +                    "sparkles",
        +                    "fire",
        +                    "bolt",
        +                    "rocket",
        +                    "trophy",
        +                    "check",
        +                    "x-mark",
        +                    "plus",
        +                    "arrow-right",
        +                    "check-badge",
        +                    "check-circle",
        +                    "shield-check",
        +                    "thumbs-up",
        +                    "heart",
        +                    "smile",
        +                    "light-bulb",
        +                    "sun",
        +                    "moon",
        +                    "gift",
        +                    "tag",
        +                    "percent",
        +                    "dollar",
        +                    "banknotes",
        +                    "credit-card",
        +                    "shopping-bag",
        +                    "shopping-cart",
        +                    "truck",
        +                    "clock",
        +                    "calendar",
        +                    "bell",
        +                    "megaphone",
        +                    "trending-up",
        +                    "chart",
        +                    "refresh",
        +                    "lock",
        +                    "key",
        +                    "ticket",
        +                    "users",
        +                    "academic-cap",
        +                    "book",
        +                    "music",
        +                    "video",
        +                    "document",
        +                    "download",
        +                    "mobile",
        +                    "camera",
        +                    "paint-brush",
        +                    "puzzle",
        +                    "cube",
        +                    "globe",
        +                    "map-pin",
        +                    "storefront",
        +                    "tools",
        +                    "beaker",
        +                    "lifebuoy",
        +                    "chat",
        +                    "envelope",
        +                    "phone",
        +                    "cake",
        +                    "scale",
        +                    "eye"
        +                  ],
        +                  "example": "star",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Optional icon shown before the badge text. `null` removes it."
        +            },
        +            "billingType": {
        +              "description": "Billing type. Part of the pricing-type identity fixed at creation — cannot change on an existing price.",
        +              "enum": [
        +                "one_time",
        +                "recurring"
        +              ],
        +              "example": "one_time",
        +              "type": "string"
        +            },
        +            "currency": {
        +              "anyOf": [
        +                {
        +                  "maxLength": 3,
        +                  "minLength": 3,
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Currency code (lowercase). Defaults to `usd`.",
        +              "example": "usd"
        +            },
        +            "discountedFromPrice": {
        +              "anyOf": [
        +                {
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The original price of the product in the smallest currency unit (cents).",
        +              "example": 9900
        +            },
        +            "enabled": {
        +              "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "hidden": {
        +              "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "Existing price id (omit when creating a new price).",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "label": {
        +              "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "order": {
        +              "description": "Dashboard display order. Lower numbers appear first.",
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "payWhatYouWant": {
        +              "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "paymentPlan": {
        +              "anyOf": [
        +                {
        +                  "properties": {
        +                    "billingCycleAnchorConfig": {
        +                      "anyOf": [
        +                        {
        +                          "properties": {
        +                            "dayOfMonth": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 31,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ],
        +                              "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                              "example": 1
        +                            },
        +                            "enabled": {
        +                              "type": [
        +                                "boolean",
        +                                "null"
        +                              ]
        +                            },
        +                            "month": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 12,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ]
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "interval": {
        +                      "anyOf": [
        +                        {
        +                          "enum": [
        +                            "day",
        +                            "week",
        +                            "month",
        +                            "year"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Billing interval for subscriptions.",
        +                      "example": "month"
        +                    },
        +                    "intervalCount": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 1,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Number of intervals between billings.",
        +                      "example": 1
        +                    },
        +                    "planIterations": {
        +                      "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +                      "example": 3,
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    "startDate": {
        +                      "anyOf": [
        +                        {
        +                          "format": "date-time",
        +                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "The date on which the subscription begins.",
        +                      "example": "2026-02-25T06:40:09.463Z"
        +                    },
        +                    "trialPeriodDays": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Trial period in days for subscriptions."
        +                    }
        +                  },
        +                  "required": [
        +                    "planIterations"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        +            },
        +            "pwywSuggestedPrice": {
        +              "anyOf": [
        +                {
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        +              "example": 2500
        +            },
        +            "recurring": {
        +              "anyOf": [
        +                {
        +                  "properties": {
        +                    "billingCycleAnchorConfig": {
        +                      "anyOf": [
        +                        {
        +                          "properties": {
        +                            "dayOfMonth": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 31,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ],
        +                              "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                              "example": 1
        +                            },
        +                            "enabled": {
        +                              "type": [
        +                                "boolean",
        +                                "null"
        +                              ]
        +                            },
        +                            "month": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 12,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ]
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "interval": {
        +                      "anyOf": [
        +                        {
        +                          "enum": [
        +                            "day",
        +                            "week",
        +                            "month",
        +                            "year"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Billing interval for subscriptions.",
        +                      "example": "month"
        +                    },
        +                    "intervalCount": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 1,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Number of intervals between billings.",
        +                      "example": 1
        +                    },
        +                    "startDate": {
        +                      "anyOf": [
        +                        {
        +                          "format": "date-time",
        +                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "The date on which the subscription begins.",
        +                      "example": "2026-02-25T06:40:09.463Z"
        +                    },
        +                    "trialPeriodDays": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Trial period in days for subscriptions."
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The recurring components of a price such as `interval` and `intervalCount`"
        +            },
        +            "reference": {
        +              "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong.",
        +              "example": "complete-bundle",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "setupFee": {
        +              "anyOf": [
        +                {
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "One-time setup fee in cents."
        +            },
        +            "setupFeeMultipliesWithQuantity": {
        +              "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        +              "example": false,
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "amount",
        +            "billingType"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "sku": {
        +        "anyOf": [
        +          {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "SKU of the product."
        +      },
        +      "stock": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Available stock of the product.",
        +        "example": 100
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "example": "exclusive",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "If Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.",
        +        "example": ""
        +      },
        +      "taxCode": {
        +        "anyOf": [
        +          {
        +            "pattern": "^(txcd_[a-zA-Z0-9]+)?$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "If Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings."
        +      },
        +      "title": {
        +        "anyOf": [
        +          {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product title. Defaults to page name if not provided.",
        +        "example": "Premium Course"
        +      },
        +      "variants": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "hidden": {
        +                  "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "increasesWithQuantity": {
        +                  "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "key": {
        +                  "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
        +                  "example": "select-package-tier",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "layout": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "collapseVariantOptions": {
        +                          "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
        +                          "example": false,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "imageSize": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "small",
        +                                "medium",
        +                                "large",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Size of variant option images. Defaults to `small`.",
        +                          "example": "small"
        +                        },
        +                        "showPwywPlaceholder": {
        +                          "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantName": {
        +                          "description": "Show the variant name. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionNames": {
        +                          "description": "Show variant option names. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPriceSign": {
        +                          "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPrices": {
        +                          "description": "Show variant option prices. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "spacing": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "comfortable",
        +                                "compact",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Spacing between variant options. Defaults to `comfortable`.",
        +                          "example": "comfortable"
        +                        },
        +                        "textAlign": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "left",
        +                                "center",
        +                                "stack",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Text alignment for variant options. Defaults to `left`.",
        +                          "example": "left"
        +                        },
        +                        "variantOptionColumns": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 10,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Number of columns for grid layout. Defaults to `2`.",
        +                          "example": 2
        +                        },
        +                        "variantOptionLayout": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "list",
        +                                "grid"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Layout style for variant options. Defaults to `list`.",
        +                          "example": "list"
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Layout configuration for this variant."
        +                },
        +                "manageVariantOptionStock": {
        +                  "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "Name of the variant.",
        +                  "example": "Plan Type",
        +                  "type": "string"
        +                },
        +                "options": {
        +                  "description": "Options within this variant. Variant must have at least one option.",
        +                  "items": {
        +                    "properties": {
        +                      "additionalChargeAmount": {
        +                        "description": "The additional charge for selecting this variant option in cents.",
        +                        "example": 1000,
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "description": {
        +                        "description": "Description of the variant option. Supports HTML or plain text.",
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "discountedFromPrice": {
        +                        "anyOf": [
        +                          {
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "The original price of this variant option in cents.",
        +                        "example": 1500
        +                      },
        +                      "fileIds": {
        +                        "anyOf": [
        +                          {
        +                            "items": {
        +                              "pattern": "^[0-9a-fA-F]{24}$",
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Files specific to this variant option. Available to the customer after purchase."
        +                      },
        +                      "imageId": {
        +                        "anyOf": [
        +                          {
        +                            "pattern": "^[0-9a-fA-F]{24}$",
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "key": {
        +                        "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
        +                        "example": "pro-option",
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "name": {
        +                        "description": "Name of the variant option.",
        +                        "example": "Basic",
        +                        "type": "string"
        +                      },
        +                      "payWhatYouWant": {
        +                        "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
        +                        "example": false,
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      },
        +                      "pwywSuggestedPrice": {
        +                        "anyOf": [
        +                          {
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
        +                        "example": 2500
        +                      },
        +                      "sku": {
        +                        "description": "SKU for this option.",
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "status": {
        +                        "anyOf": [
        +                          {
        +                            "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                            "enum": [
        +                              "enabled",
        +                              "disabled",
        +                              "deleted"
        +                            ],
        +                            "example": "enabled",
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Status of the variant option. Defaults to `enabled`.",
        +                        "example": "enabled"
        +                      },
        +                      "stock": {
        +                        "description": "Stock quantity for this option.",
        +                        "example": 10,
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "type": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "one_time",
        +                              "recurring"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
        +                        "example": "one_time"
        +                      }
        +                    },
        +                    "required": [
        +                      "name"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "minItems": 1,
        +                  "type": "array"
        +                },
        +                "order": {
        +                  "description": "Display order of the variant. Defaults to `0`.",
        +                  "example": 0,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "preselect": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "enabled": {
        +                          "description": "Enable preselecting a variant option. Defaults to `false`.",
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "optionId": {
        +                          "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
        +                          "example": "pro-option",
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "quantity": {
        +                          "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
        +                          "example": 2,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Preselect configuration for this variant.",
        +                  "example": {
        +                    "enabled": true,
        +                    "optionId": "pro-option",
        +                    "quantity": 1
        +                  }
        +                },
        +                "priceIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
        +                  "example": [
        +                    "507f1f77bcf86cd799439011"
        +                  ]
        +                },
        +                "reference": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 36,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Stable ID that exports and integrations use for this variant. Generated from the variant name when omitted, and not updated when the name changes. Changing it breaks integrations that match on the old one, so only send it when the seller asks.",
        +                  "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
        +                },
        +                "required": {
        +                  "description": "Whether the customer must select at least one option in the variant.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "selectionType": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +                      "enum": [
        +                        "single",
        +                        "multiple",
        +                        "quantity"
        +                      ],
        +                      "example": "single",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
        +                  "example": "single"
        +                },
        +                "showHideLogic": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "comparison": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "is",
        +                                "is_not",
        +                                "is_empty",
        +                                "is_not_empty",
        +                                "contains"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
        +                          "example": "is"
        +                        },
        +                        "element": {
        +                          "anyOf": [
        +                            {
        +                              "properties": {
        +                                "elementId": {
        +                                  "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
        +                                  "example": "select-package-tier",
        +                                  "type": [
        +                                    "string",
        +                                    "null"
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Element (variant) to compare against."
        +                        },
        +                        "enabled": {
        +                          "description": "Enable conditional show/hide logic. Defaults to `false`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "value": {
        +                          "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
        +                          "example": "pro-option",
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Conditional logic to show or hide this variant based on other form elements."
        +                },
        +                "status": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                      "enum": [
        +                        "enabled",
        +                        "disabled",
        +                        "deleted"
        +                      ],
        +                      "example": "enabled",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Status of the variant. Defaults to `enabled`",
        +                  "example": "enabled"
        +                },
        +                "useVariantOptionSkus": {
        +                  "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "name",
        +                "options"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product variants and options. To link a discount to specific variant options, assign a `key` to each relevant option here and reference those keys in `discounts[].variantOptionIds[].key` within the same request."
        +      },
        +      "variantsRequired": {
        +        "description": "Use 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`.",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
      • changedOutput schema / properties / data / properties / product / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "callToActionText": {
        -        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "calloutIcon": {
        -        "anyOf": [
        -          {
        -            "description": "Icon shown before the badge text.",
        -            "enum": [
        -              "star",
        -              "sparkles",
        -              "fire",
        -              "bolt",
        -              "rocket",
        -              "trophy",
        -              "check",
        -              "x-mark",
        -              "plus",
        -              "arrow-right",
        -              "check-badge",
        -              "check-circle",
        -              "shield-check",
        -              "thumbs-up",
        -              "heart",
        -              "smile",
        -              "light-bulb",
        -              "sun",
        -              "moon",
        -              "gift",
        -              "tag",
        -              "percent",
        -              "dollar",
        -              "banknotes",
        -              "credit-card",
        -              "shopping-bag",
        -              "shopping-cart",
        -              "truck",
        -              "clock",
        -              "calendar",
        -              "bell",
        -              "megaphone",
        -              "trending-up",
        -              "chart",
        -              "refresh",
        -              "lock",
        -              "key",
        -              "ticket",
        -              "users",
        -              "academic-cap",
        -              "book",
        -              "music",
        -              "video",
        -              "document",
        -              "download",
        -              "mobile",
        -              "camera",
        -              "paint-brush",
        -              "puzzle",
        -              "cube",
        -              "globe",
        -              "map-pin",
        -              "storefront",
        -              "tools",
        -              "beaker",
        -              "lifebuoy",
        -              "chat",
        -              "envelope",
        -              "phone",
        -              "cake",
        -              "scale",
        -              "eye"
        -            ],
        -            "example": "star",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Icon leading the call out box."
        -      },
        -      "calloutText": {
        -        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdAt": {
        -        "description": "ISO 8601 timestamp when the product was created.",
        -        "type": "string"
        -      },
        -      "defaultPriceId": {
        -        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "description": "Product description as HTML.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "checkout_quantity",
        -                    "variant_option_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "variantOptionIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Bulk discount tiers."
        -      },
        -      "enableFileAccessForInactiveSubscriptions": {
        -        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "features": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "icon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon leading a feature line, or `none` for no icon.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye",
        -                        "none"
        -                      ],
        -                      "example": "check-circle",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        -                },
        -                "text": {
        -                  "description": "One line of the list.",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "text"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        -      },
        -      "fileIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Applied Tax Rate IDs for this product."
        -      },
        -      "generateLicenseKeys": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "hasUnlimitedStock": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "headingText": {
        -        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the product.",
        -        "type": "string"
        -      },
        -      "limitPayments": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        -      },
        -      "limitSubscriptions": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "limitSubscriptionsStripe": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "enabled": {
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-subscription prevention settings for this product."
        -      },
        -      "media": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "fileId": {
        -                  "description": "File ID of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "height": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "size": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "url": {
        -                  "description": "CDN URL of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "width": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product images."
        -      },
        -      "price": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "amount": {
        -            "description": "Price in smallest currency unit (cents).",
        -            "example": 4900,
        -            "type": "number"
        -          },
        -          "currency": {
        -            "description": "Lowercase ISO 4217 currency code.",
        -            "example": "usd",
        -            "type": "string"
        -          },
        -          "discountedFromPrice": {
        -            "description": "Original price before discount, in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "payWhatYouWant": {
        -            "description": "Whether pay-what-you-want pricing is enabled.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "paymentPlan": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "planIterations": {
        -                    "description": "Number of billing cycles after which the plan completes.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -          },
        -          "pricingType": {
        -            "anyOf": [
        -              {
        -                "description": "Pricing type for this product - single price or multiple prices using variants.",
        -                "enum": [
        -                  "single",
        -                  "multiple"
        -                ],
        -                "example": "single",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "deprecated": true,
        -            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        -            "example": "single"
        -          },
        -          "recurring": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Recurring billing configuration. Never present together with paymentPlan."
        -          },
        -          "setupFee": {
        -            "description": "One-time setup fee in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "setupFeeMultipliesWithQuantity": {
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "amount",
        -          "currency"
        -        ],
        -        "type": "object"
        -      },
        -      "pricePicker": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "description": {
        -                "description": "Text shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "priceDisplayDefaults": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "type": "string"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayLabels": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "additionalProperties": {
        -                        "type": "string"
        -                      },
        -                      "propertyNames": {
        -                        "type": "string"
        -                      },
        -                      "type": "object"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayTabOrder": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "shortenDescription": {
        -                "description": "Whether long price descriptions are cut behind a Show more link.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "title": {
        -                "description": "Heading shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        -      },
        -      "prices": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "description": "A single price entry on a multi-price product.",
        -              "properties": {
        -                "amount": {
        -                  "description": "Price in smallest currency unit (cents).",
        -                  "example": 4900,
        -                  "type": "number"
        -                },
        -                "badge": {
        -                  "description": "Optional short label shown over the price card.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "badgeIcon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon shown before the badge text.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye"
        -                      ],
        -                      "example": "star",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Optional icon shown before the badge text."
        -                },
        -                "billingType": {
        -                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -                  "enum": [
        -                    "one_time",
        -                    "recurring"
        -                  ],
        -                  "example": "one_time",
        -                  "type": "string"
        -                },
        -                "currency": {
        -                  "description": "Lowercase ISO 4217 currency code.",
        -                  "example": "usd",
        -                  "type": "string"
        -                },
        -                "discountedFromPrice": {
        -                  "description": "Original price before discount, in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "enabled": {
        -                  "description": "Whether this price is selectable by customers.",
        -                  "type": "boolean"
        -                },
        -                "hidden": {
        -                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "description": "Unique price identifier.",
        -                  "example": "507f1f77bcf86cd799439011",
        -                  "type": "string"
        -                },
        -                "isDefault": {
        -                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -                  "type": "boolean"
        -                },
        -                "label": {
        -                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "order": {
        -                  "description": "Dashboard display order.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "payWhatYouWant": {
        -                  "description": "Whether pay-what-you-want pricing is enabled.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "paymentPlan": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "planIterations": {
        -                          "description": "Number of billing cycles after which the plan completes.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -                },
        -                "pwywSuggestedPrice": {
        -                  "description": "Suggested price in cents for PWYW prices.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "recurring": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        -                },
        -                "reference": {
        -                  "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "setupFee": {
        -                  "description": "One-time setup fee in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "setupFeeMultipliesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "amount",
        -                "currency",
        -                "id",
        -                "enabled",
        -                "isDefault",
        -                "billingType"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        -            "enum": [
        -              "product",
        -              "orderbump"
        -            ],
        -            "example": "product",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "shortDescription": {
        -        "description": "Plain-text one-liner, shown where the full description is too long.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sku": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "stock": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "example": "exclusive",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "description": "Product title.",
        -        "example": "Premium Course",
        -        "type": "string"
        -      },
        -      "type": {
        -        "description": "Product type.",
        -        "enum": [
        -          "charge",
        -          "subscription"
        -        ],
        -        "example": "charge",
        -        "type": "string"
        -      },
        -      "updatedAt": {
        -        "description": "ISO 8601 timestamp when the product was last updated.",
        -        "type": "string"
        -      },
        -      "variants": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "hidden": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "increasesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "layout": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "collapseVariantOptions": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "imageSize": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "small",
        -                                "medium",
        -                                "large",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "showPwywPlaceholder": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantName": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionNames": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPriceSign": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPrices": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "spacing": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "comfortable",
        -                                "compact",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "textAlign": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "left",
        -                                "center",
        -                                "stack",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "variantOptionColumns": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "variantOptionLayout": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "list",
        -                                "grid"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "manageVariantOptionStock": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": "string"
        -                },
        -                "options": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "additionalChargeAmount": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "description": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "fileIds": {
        -                            "anyOf": [
        -                              {
        -                                "items": {
        -                                  "pattern": "^[0-9a-fA-F]{24}$",
        -                                  "type": "string"
        -                                },
        -                                "type": "array"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "id": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "image": {
        -                            "anyOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "fileId": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "height": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "name": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "size": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "url": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "width": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  }
        -                                },
        -                                "type": "object"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "name": {
        -                            "type": "string"
        -                          },
        -                          "payWhatYouWant": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "pwywSuggestedPrice": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "sku": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "status": {
        -                            "anyOf": [
        -                              {
        -                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                                "enum": [
        -                                  "enabled",
        -                                  "disabled",
        -                                  "deleted"
        -                                ],
        -                                "example": "enabled",
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "stock": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "type": {
        -                            "anyOf": [
        -                              {
        -                                "enum": [
        -                                  "one_time",
        -                                  "recurring",
        -                                  "pay_what_you_want"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "required": [
        -                          "name"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "order": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "preselect": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "optionId": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        },
        -                        "quantity": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "priceIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        -                },
        -                "reference": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "required": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "selectionType": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -                      "enum": [
        -                        "single",
        -                        "multiple",
        -                        "quantity"
        -                      ],
        -                      "example": "single",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "showHideLogic": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "comparison": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "is",
        -                                "is_not",
        -                                "is_empty",
        -                                "is_not_empty",
        -                                "contains"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "element": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "elementId": {
        -                                  "type": [
        -                                    "string",
        -                                    "null"
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "value": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "status": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                      "enum": [
        -                        "enabled",
        -                        "disabled",
        -                        "deleted"
        -                      ],
        -                      "example": "enabled",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "useVariantOptionSkus": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "name"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product variants."
        -      },
        -      "variantsRequired": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "title",
        -      "price",
        -      "createdAt",
        -      "updatedAt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "callToActionText": {
        +        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "calloutIcon": {
        +        "anyOf": [
        +          {
        +            "description": "Icon shown before the badge text.",
        +            "enum": [
        +              "star",
        +              "sparkles",
        +              "fire",
        +              "bolt",
        +              "rocket",
        +              "trophy",
        +              "check",
        +              "x-mark",
        +              "plus",
        +              "arrow-right",
        +              "check-badge",
        +              "check-circle",
        +              "shield-check",
        +              "thumbs-up",
        +              "heart",
        +              "smile",
        +              "light-bulb",
        +              "sun",
        +              "moon",
        +              "gift",
        +              "tag",
        +              "percent",
        +              "dollar",
        +              "banknotes",
        +              "credit-card",
        +              "shopping-bag",
        +              "shopping-cart",
        +              "truck",
        +              "clock",
        +              "calendar",
        +              "bell",
        +              "megaphone",
        +              "trending-up",
        +              "chart",
        +              "refresh",
        +              "lock",
        +              "key",
        +              "ticket",
        +              "users",
        +              "academic-cap",
        +              "book",
        +              "music",
        +              "video",
        +              "document",
        +              "download",
        +              "mobile",
        +              "camera",
        +              "paint-brush",
        +              "puzzle",
        +              "cube",
        +              "globe",
        +              "map-pin",
        +              "storefront",
        +              "tools",
        +              "beaker",
        +              "lifebuoy",
        +              "chat",
        +              "envelope",
        +              "phone",
        +              "cake",
        +              "scale",
        +              "eye"
        +            ],
        +            "example": "star",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Icon leading the call out box."
        +      },
        +      "calloutText": {
        +        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdAt": {
        +        "description": "ISO 8601 timestamp when the product was created.",
        +        "type": "string"
        +      },
        +      "defaultPriceId": {
        +        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "description": "Product description as HTML.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "checkout_quantity",
        +                    "variant_option_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "variantOptionIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Bulk discount tiers."
        +      },
        +      "enableFileAccessForInactiveSubscriptions": {
        +        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "features": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "icon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon leading a feature line, or `none` for no icon.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye",
        +                        "none"
        +                      ],
        +                      "example": "check-circle",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        +                },
        +                "text": {
        +                  "description": "One line of the list.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "text"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        +      },
        +      "fileIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Applied Tax Rate IDs for this product."
        +      },
        +      "generateLicenseKeys": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "hasUnlimitedStock": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "headingText": {
        +        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the product.",
        +        "type": "string"
        +      },
        +      "limitPayments": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        +      },
        +      "limitSubscriptions": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "limitSubscriptionsStripe": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "enabled": {
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-subscription prevention settings for this product."
        +      },
        +      "media": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "fileId": {
        +                  "description": "File ID of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "height": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "size": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "url": {
        +                  "description": "CDN URL of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "width": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product images."
        +      },
        +      "price": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount": {
        +            "description": "Price in smallest currency unit (cents).",
        +            "example": 4900,
        +            "type": "number"
        +          },
        +          "currency": {
        +            "description": "Lowercase ISO 4217 currency code.",
        +            "example": "usd",
        +            "type": "string"
        +          },
        +          "discountedFromPrice": {
        +            "description": "Original price before discount, in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "payWhatYouWant": {
        +            "description": "Whether pay-what-you-want pricing is enabled.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "paymentPlan": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "planIterations": {
        +                    "description": "Number of billing cycles after which the plan completes.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +          },
        +          "pricingType": {
        +            "anyOf": [
        +              {
        +                "description": "Pricing type for this product - single price or multiple prices using variants.",
        +                "enum": [
        +                  "single",
        +                  "multiple"
        +                ],
        +                "example": "single",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "deprecated": true,
        +            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        +            "example": "single"
        +          },
        +          "recurring": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Recurring billing configuration. Never present together with paymentPlan."
        +          },
        +          "setupFee": {
        +            "description": "One-time setup fee in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "setupFeeMultipliesWithQuantity": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "amount",
        +          "currency"
        +        ],
        +        "type": "object"
        +      },
        +      "pricePicker": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "description": "Text shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "priceDisplayDefaults": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "string"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayLabels": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayTabOrder": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "shortenDescription": {
        +                "description": "Whether long price descriptions are cut behind a Show more link.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "Heading shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        +      },
        +      "prices": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "A single price entry on a multi-price product.",
        +              "properties": {
        +                "amount": {
        +                  "description": "Price in smallest currency unit (cents).",
        +                  "example": 4900,
        +                  "type": "number"
        +                },
        +                "badge": {
        +                  "description": "Optional short label shown over the price card.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "badgeIcon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon shown before the badge text.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye"
        +                      ],
        +                      "example": "star",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Optional icon shown before the badge text."
        +                },
        +                "billingType": {
        +                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +                  "enum": [
        +                    "one_time",
        +                    "recurring"
        +                  ],
        +                  "example": "one_time",
        +                  "type": "string"
        +                },
        +                "currency": {
        +                  "description": "Lowercase ISO 4217 currency code.",
        +                  "example": "usd",
        +                  "type": "string"
        +                },
        +                "discountedFromPrice": {
        +                  "description": "Original price before discount, in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "enabled": {
        +                  "description": "Whether this price is selectable by customers.",
        +                  "type": "boolean"
        +                },
        +                "hidden": {
        +                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "description": "Unique price identifier.",
        +                  "example": "507f1f77bcf86cd799439011",
        +                  "type": "string"
        +                },
        +                "isDefault": {
        +                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "order": {
        +                  "description": "Dashboard display order.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "payWhatYouWant": {
        +                  "description": "Whether pay-what-you-want pricing is enabled.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "paymentPlan": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "planIterations": {
        +                          "description": "Number of billing cycles after which the plan completes.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +                },
        +                "pwywSuggestedPrice": {
        +                  "description": "Suggested price in cents for PWYW prices.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "recurring": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        +                },
        +                "reference": {
        +                  "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "setupFee": {
        +                  "description": "One-time setup fee in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "setupFeeMultipliesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "amount",
        +                "currency",
        +                "id",
        +                "enabled",
        +                "isDefault",
        +                "billingType"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        +      },
        +      "role": {
        +        "anyOf": [
        +          {
        +            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        +            "enum": [
        +              "product",
        +              "orderbump"
        +            ],
        +            "example": "product",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "shortDescription": {
        +        "description": "Plain-text one-liner, shown where the full description is too long.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sku": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "stock": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "example": "exclusive",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Product title.",
        +        "example": "Premium Course",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Product type.",
        +        "enum": [
        +          "charge",
        +          "subscription"
        +        ],
        +        "example": "charge",
        +        "type": "string"
        +      },
        +      "updatedAt": {
        +        "description": "ISO 8601 timestamp when the product was last updated.",
        +        "type": "string"
        +      },
        +      "variants": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "hidden": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "increasesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "layout": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "collapseVariantOptions": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "imageSize": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "small",
        +                                "medium",
        +                                "large",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "showPwywPlaceholder": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantName": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionNames": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPriceSign": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPrices": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "spacing": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "comfortable",
        +                                "compact",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "textAlign": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "left",
        +                                "center",
        +                                "stack",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "variantOptionColumns": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "variantOptionLayout": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "list",
        +                                "grid"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "manageVariantOptionStock": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "options": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "additionalChargeAmount": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "description": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "fileIds": {
        +                            "anyOf": [
        +                              {
        +                                "items": {
        +                                  "pattern": "^[0-9a-fA-F]{24}$",
        +                                  "type": "string"
        +                                },
        +                                "type": "array"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "id": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "image": {
        +                            "anyOf": [
        +                              {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "fileId": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "height": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "name": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "size": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "url": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "width": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  }
        +                                },
        +                                "type": "object"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "name": {
        +                            "type": "string"
        +                          },
        +                          "payWhatYouWant": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "pwywSuggestedPrice": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "sku": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "status": {
        +                            "anyOf": [
        +                              {
        +                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                                "enum": [
        +                                  "enabled",
        +                                  "disabled",
        +                                  "deleted"
        +                                ],
        +                                "example": "enabled",
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "stock": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "type": {
        +                            "anyOf": [
        +                              {
        +                                "enum": [
        +                                  "one_time",
        +                                  "recurring",
        +                                  "pay_what_you_want"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "required": [
        +                          "name"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "order": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "preselect": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "optionId": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "quantity": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "priceIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        +                },
        +                "reference": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "required": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "selectionType": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +                      "enum": [
        +                        "single",
        +                        "multiple",
        +                        "quantity"
        +                      ],
        +                      "example": "single",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "showHideLogic": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "comparison": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "is",
        +                                "is_not",
        +                                "is_empty",
        +                                "is_not_empty",
        +                                "contains"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "element": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "elementId": {
        +                                  "type": [
        +                                    "string",
        +                                    "null"
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "value": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "status": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                      "enum": [
        +                        "enabled",
        +                        "disabled",
        +                        "deleted"
        +                      ],
        +                      "example": "enabled",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "useVariantOptionSkus": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "name"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product variants."
        +      },
        +      "variantsRequired": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "type",
        +      "title",
        +      "price",
        +      "createdAt",
        +      "updatedAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_event2 fields changed
      • changedInput schema / $defs / FieldInput / properties / reference / description
        Previous value: -"External reference ID for integration purposes. Generated from the field type or label when omitted."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks."
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedcreate_field2 fields changed
      • changedInput schema / properties / reference / description
        Previous value: -"External reference ID for integration purposes. Generated from the field type or label when omitted."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks."
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedcreate_form2 fields changed
      • changedInput schema / $defs / FieldInput / properties / reference / description
        Previous value: -"External reference ID for integration purposes. Generated from the field type or label when omitted."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks."
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedcreate_product3 fields changed
      • changedInput schema / properties / price / properties / reference / description
        Previous value: -"Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference."New value: +"Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong."
      • changedInput schema / properties / price / properties / reference / example
        Previous value: -"price_one_time_fixed_5000"New value: +"complete-bundle"
      • changedOutput schema / properties / data / properties / prices / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "description": "A single price entry on a multi-price product.",
        -      "properties": {
        -        "amount": {
        -          "description": "Price in smallest currency unit (cents).",
        -          "example": 4900,
        -          "type": "number"
        -        },
        -        "badge": {
        -          "description": "Optional short label shown over the price card.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "badgeIcon": {
        -          "anyOf": [
        -            {
        -              "description": "Icon shown before the badge text.",
        -              "enum": [
        -                "star",
        -                "sparkles",
        -                "fire",
        -                "bolt",
        -                "rocket",
        -                "trophy",
        -                "check",
        -                "x-mark",
        -                "plus",
        -                "arrow-right",
        -                "check-badge",
        -                "check-circle",
        -                "shield-check",
        -                "thumbs-up",
        -                "heart",
        -                "smile",
        -                "light-bulb",
        -                "sun",
        -                "moon",
        -                "gift",
        -                "tag",
        -                "percent",
        -                "dollar",
        -                "banknotes",
        -                "credit-card",
        -                "shopping-bag",
        -                "shopping-cart",
        -                "truck",
        -                "clock",
        -                "calendar",
        -                "bell",
        -                "megaphone",
        -                "trending-up",
        -                "chart",
        -                "refresh",
        -                "lock",
        -                "key",
        -                "ticket",
        -                "users",
        -                "academic-cap",
        -                "book",
        -                "music",
        -                "video",
        -                "document",
        -                "download",
        -                "mobile",
        -                "camera",
        -                "paint-brush",
        -                "puzzle",
        -                "cube",
        -                "globe",
        -                "map-pin",
        -                "storefront",
        -                "tools",
        -                "beaker",
        -                "lifebuoy",
        -                "chat",
        -                "envelope",
        -                "phone",
        -                "cake",
        -                "scale",
        -                "eye"
        -              ],
        -              "example": "star",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Optional icon shown before the badge text."
        -        },
        -        "billingType": {
        -          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -          "enum": [
        -            "one_time",
        -            "recurring"
        -          ],
        -          "example": "one_time",
        -          "type": "string"
        -        },
        -        "currency": {
        -          "description": "Lowercase ISO 4217 currency code.",
        -          "example": "usd",
        -          "type": "string"
        -        },
        -        "discountedFromPrice": {
        -          "description": "Original price before discount, in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "enabled": {
        -          "description": "Whether this price is selectable by customers.",
        -          "type": "boolean"
        -        },
        -        "hidden": {
        -          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "Unique price identifier.",
        -          "example": "507f1f77bcf86cd799439011",
        -          "type": "string"
        -        },
        -        "isDefault": {
        -          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -          "type": "boolean"
        -        },
        -        "label": {
        -          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order": {
        -          "description": "Dashboard display order.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "payWhatYouWant": {
        -          "description": "Whether pay-what-you-want pricing is enabled.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "paymentPlan": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "planIterations": {
        -                  "description": "Number of billing cycles after which the plan completes.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -        },
        -        "pwywSuggestedPrice": {
        -          "description": "Suggested price in cents for PWYW prices.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "recurring": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Recurring billing configuration. Never present together with paymentPlan."
        -        },
        -        "reference": {
        -          "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "setupFee": {
        -          "description": "One-time setup fee in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "setupFeeMultipliesWithQuantity": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "amount",
        -        "currency",
        -        "id",
        -        "enabled",
        -        "isDefault",
        -        "billingType"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "A single price entry on a multi-price product.",
        +      "properties": {
        +        "amount": {
        +          "description": "Price in smallest currency unit (cents).",
        +          "example": 4900,
        +          "type": "number"
        +        },
        +        "badge": {
        +          "description": "Optional short label shown over the price card.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "badgeIcon": {
        +          "anyOf": [
        +            {
        +              "description": "Icon shown before the badge text.",
        +              "enum": [
        +                "star",
        +                "sparkles",
        +                "fire",
        +                "bolt",
        +                "rocket",
        +                "trophy",
        +                "check",
        +                "x-mark",
        +                "plus",
        +                "arrow-right",
        +                "check-badge",
        +                "check-circle",
        +                "shield-check",
        +                "thumbs-up",
        +                "heart",
        +                "smile",
        +                "light-bulb",
        +                "sun",
        +                "moon",
        +                "gift",
        +                "tag",
        +                "percent",
        +                "dollar",
        +                "banknotes",
        +                "credit-card",
        +                "shopping-bag",
        +                "shopping-cart",
        +                "truck",
        +                "clock",
        +                "calendar",
        +                "bell",
        +                "megaphone",
        +                "trending-up",
        +                "chart",
        +                "refresh",
        +                "lock",
        +                "key",
        +                "ticket",
        +                "users",
        +                "academic-cap",
        +                "book",
        +                "music",
        +                "video",
        +                "document",
        +                "download",
        +                "mobile",
        +                "camera",
        +                "paint-brush",
        +                "puzzle",
        +                "cube",
        +                "globe",
        +                "map-pin",
        +                "storefront",
        +                "tools",
        +                "beaker",
        +                "lifebuoy",
        +                "chat",
        +                "envelope",
        +                "phone",
        +                "cake",
        +                "scale",
        +                "eye"
        +              ],
        +              "example": "star",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Optional icon shown before the badge text."
        +        },
        +        "billingType": {
        +          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +          "enum": [
        +            "one_time",
        +            "recurring"
        +          ],
        +          "example": "one_time",
        +          "type": "string"
        +        },
        +        "currency": {
        +          "description": "Lowercase ISO 4217 currency code.",
        +          "example": "usd",
        +          "type": "string"
        +        },
        +        "discountedFromPrice": {
        +          "description": "Original price before discount, in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "enabled": {
        +          "description": "Whether this price is selectable by customers.",
        +          "type": "boolean"
        +        },
        +        "hidden": {
        +          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Unique price identifier.",
        +          "example": "507f1f77bcf86cd799439011",
        +          "type": "string"
        +        },
        +        "isDefault": {
        +          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +          "type": "boolean"
        +        },
        +        "label": {
        +          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "order": {
        +          "description": "Dashboard display order.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "payWhatYouWant": {
        +          "description": "Whether pay-what-you-want pricing is enabled.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "paymentPlan": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "planIterations": {
        +                  "description": "Number of billing cycles after which the plan completes.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +        },
        +        "pwywSuggestedPrice": {
        +          "description": "Suggested price in cents for PWYW prices.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "recurring": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Recurring billing configuration. Never present together with paymentPlan."
        +        },
        +        "reference": {
        +          "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "setupFee": {
        +          "description": "One-time setup fee in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "setupFeeMultipliesWithQuantity": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "id",
        +        "enabled",
        +        "isDefault",
        +        "billingType"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_checkout_page2 fields changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
      • changedOutput schema / properties / data / properties / product / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "callToActionText": {
        -        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "calloutIcon": {
        -        "anyOf": [
        -          {
        -            "description": "Icon shown before the badge text.",
        -            "enum": [
        -              "star",
        -              "sparkles",
        -              "fire",
        -              "bolt",
        -              "rocket",
        -              "trophy",
        -              "check",
        -              "x-mark",
        -              "plus",
        -              "arrow-right",
        -              "check-badge",
        -              "check-circle",
        -              "shield-check",
        -              "thumbs-up",
        -              "heart",
        -              "smile",
        -              "light-bulb",
        -              "sun",
        -              "moon",
        -              "gift",
        -              "tag",
        -              "percent",
        -              "dollar",
        -              "banknotes",
        -              "credit-card",
        -              "shopping-bag",
        -              "shopping-cart",
        -              "truck",
        -              "clock",
        -              "calendar",
        -              "bell",
        -              "megaphone",
        -              "trending-up",
        -              "chart",
        -              "refresh",
        -              "lock",
        -              "key",
        -              "ticket",
        -              "users",
        -              "academic-cap",
        -              "book",
        -              "music",
        -              "video",
        -              "document",
        -              "download",
        -              "mobile",
        -              "camera",
        -              "paint-brush",
        -              "puzzle",
        -              "cube",
        -              "globe",
        -              "map-pin",
        -              "storefront",
        -              "tools",
        -              "beaker",
        -              "lifebuoy",
        -              "chat",
        -              "envelope",
        -              "phone",
        -              "cake",
        -              "scale",
        -              "eye"
        -            ],
        -            "example": "star",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Icon leading the call out box."
        -      },
        -      "calloutText": {
        -        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdAt": {
        -        "description": "ISO 8601 timestamp when the product was created.",
        -        "type": "string"
        -      },
        -      "defaultPriceId": {
        -        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "description": "Product description as HTML.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "checkout_quantity",
        -                    "variant_option_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "variantOptionIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Bulk discount tiers."
        -      },
        -      "enableFileAccessForInactiveSubscriptions": {
        -        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "features": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "icon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon leading a feature line, or `none` for no icon.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye",
        -                        "none"
        -                      ],
        -                      "example": "check-circle",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        -                },
        -                "text": {
        -                  "description": "One line of the list.",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "text"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        -      },
        -      "fileIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Applied Tax Rate IDs for this product."
        -      },
        -      "generateLicenseKeys": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "hasUnlimitedStock": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "headingText": {
        -        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the product.",
        -        "type": "string"
        -      },
        -      "limitPayments": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        -      },
        -      "limitSubscriptions": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "limitSubscriptionsStripe": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "enabled": {
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-subscription prevention settings for this product."
        -      },
        -      "media": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "fileId": {
        -                  "description": "File ID of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "height": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "size": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "url": {
        -                  "description": "CDN URL of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "width": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product images."
        -      },
        -      "price": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "amount": {
        -            "description": "Price in smallest currency unit (cents).",
        -            "example": 4900,
        -            "type": "number"
        -          },
        -          "currency": {
        -            "description": "Lowercase ISO 4217 currency code.",
        -            "example": "usd",
        -            "type": "string"
        -          },
        -          "discountedFromPrice": {
        -            "description": "Original price before discount, in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "payWhatYouWant": {
        -            "description": "Whether pay-what-you-want pricing is enabled.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "paymentPlan": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "planIterations": {
        -                    "description": "Number of billing cycles after which the plan completes.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -          },
        -          "pricingType": {
        -            "anyOf": [
        -              {
        -                "description": "Pricing type for this product - single price or multiple prices using variants.",
        -                "enum": [
        -                  "single",
        -                  "multiple"
        -                ],
        -                "example": "single",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "deprecated": true,
        -            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        -            "example": "single"
        -          },
        -          "recurring": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Recurring billing configuration. Never present together with paymentPlan."
        -          },
        -          "setupFee": {
        -            "description": "One-time setup fee in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "setupFeeMultipliesWithQuantity": {
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "amount",
        -          "currency"
        -        ],
        -        "type": "object"
        -      },
        -      "pricePicker": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "description": {
        -                "description": "Text shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "priceDisplayDefaults": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "type": "string"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayLabels": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "additionalProperties": {
        -                        "type": "string"
        -                      },
        -                      "propertyNames": {
        -                        "type": "string"
        -                      },
        -                      "type": "object"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayTabOrder": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "shortenDescription": {
        -                "description": "Whether long price descriptions are cut behind a Show more link.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "title": {
        -                "description": "Heading shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        -      },
        -      "prices": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "description": "A single price entry on a multi-price product.",
        -              "properties": {
        -                "amount": {
        -                  "description": "Price in smallest currency unit (cents).",
        -                  "example": 4900,
        -                  "type": "number"
        -                },
        -                "badge": {
        -                  "description": "Optional short label shown over the price card.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "badgeIcon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon shown before the badge text.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye"
        -                      ],
        -                      "example": "star",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Optional icon shown before the badge text."
        -                },
        -                "billingType": {
        -                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -                  "enum": [
        -                    "one_time",
        -                    "recurring"
        -                  ],
        -                  "example": "one_time",
        -                  "type": "string"
        -                },
        -                "currency": {
        -                  "description": "Lowercase ISO 4217 currency code.",
        -                  "example": "usd",
        -                  "type": "string"
        -                },
        -                "discountedFromPrice": {
        -                  "description": "Original price before discount, in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "enabled": {
        -                  "description": "Whether this price is selectable by customers.",
        -                  "type": "boolean"
        -                },
        -                "hidden": {
        -                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "description": "Unique price identifier.",
        -                  "example": "507f1f77bcf86cd799439011",
        -                  "type": "string"
        -                },
        -                "isDefault": {
        -                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -                  "type": "boolean"
        -                },
        -                "label": {
        -                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "order": {
        -                  "description": "Dashboard display order.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "payWhatYouWant": {
        -                  "description": "Whether pay-what-you-want pricing is enabled.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "paymentPlan": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "planIterations": {
        -                          "description": "Number of billing cycles after which the plan completes.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -                },
        -                "pwywSuggestedPrice": {
        -                  "description": "Suggested price in cents for PWYW prices.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "recurring": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        -                },
        -                "reference": {
        -                  "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "setupFee": {
        -                  "description": "One-time setup fee in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "setupFeeMultipliesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "amount",
        -                "currency",
        -                "id",
        -                "enabled",
        -                "isDefault",
        -                "billingType"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        -            "enum": [
        -              "product",
        -              "orderbump"
        -            ],
        -            "example": "product",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "shortDescription": {
        -        "description": "Plain-text one-liner, shown where the full description is too long.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sku": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "stock": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "example": "exclusive",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "description": "Product title.",
        -        "example": "Premium Course",
        -        "type": "string"
        -      },
        -      "type": {
        -        "description": "Product type.",
        -        "enum": [
        -          "charge",
        -          "subscription"
        -        ],
        -        "example": "charge",
        -        "type": "string"
        -      },
        -      "updatedAt": {
        -        "description": "ISO 8601 timestamp when the product was last updated.",
        -        "type": "string"
        -      },
        -      "variants": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "hidden": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "increasesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "layout": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "collapseVariantOptions": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "imageSize": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "small",
        -                                "medium",
        -                                "large",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "showPwywPlaceholder": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantName": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionNames": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPriceSign": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPrices": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "spacing": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "comfortable",
        -                                "compact",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "textAlign": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "left",
        -                                "center",
        -                                "stack",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "variantOptionColumns": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "variantOptionLayout": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "list",
        -                                "grid"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "manageVariantOptionStock": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": "string"
        -                },
        -                "options": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "additionalChargeAmount": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "description": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "fileIds": {
        -                            "anyOf": [
        -                              {
        -                                "items": {
        -                                  "pattern": "^[0-9a-fA-F]{24}$",
        -                                  "type": "string"
        -                                },
        -                                "type": "array"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "id": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "image": {
        -                            "anyOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "fileId": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "height": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "name": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "size": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "url": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "width": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  }
        -                                },
        -                                "type": "object"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "name": {
        -                            "type": "string"
        -                          },
        -                          "payWhatYouWant": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "pwywSuggestedPrice": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "sku": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "status": {
        -                            "anyOf": [
        -                              {
        -                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                                "enum": [
        -                                  "enabled",
        -                                  "disabled",
        -                                  "deleted"
        -                                ],
        -                                "example": "enabled",
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "stock": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "type": {
        -                            "anyOf": [
        -                              {
        -                                "enum": [
        -                                  "one_time",
        -                                  "recurring",
        -                                  "pay_what_you_want"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "required": [
        -                          "name"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "order": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "preselect": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "optionId": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        },
        -                        "quantity": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "priceIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        -                },
        -                "reference": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "required": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "selectionType": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -                      "enum": [
        -                        "single",
        -                        "multiple",
        -                        "quantity"
        -                      ],
        -                      "example": "single",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "showHideLogic": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "comparison": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "is",
        -                                "is_not",
        -                                "is_empty",
        -                                "is_not_empty",
        -                                "contains"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "element": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "elementId": {
        -                                  "type": [
        -                                    "string",
        -                                    "null"
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "value": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "status": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                      "enum": [
        -                        "enabled",
        -                        "disabled",
        -                        "deleted"
        -                      ],
        -                      "example": "enabled",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "useVariantOptionSkus": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "name"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product variants."
        -      },
        -      "variantsRequired": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "title",
        -      "price",
        -      "createdAt",
        -      "updatedAt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "callToActionText": {
        +        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "calloutIcon": {
        +        "anyOf": [
        +          {
        +            "description": "Icon shown before the badge text.",
        +            "enum": [
        +              "star",
        +              "sparkles",
        +              "fire",
        +              "bolt",
        +              "rocket",
        +              "trophy",
        +              "check",
        +              "x-mark",
        +              "plus",
        +              "arrow-right",
        +              "check-badge",
        +              "check-circle",
        +              "shield-check",
        +              "thumbs-up",
        +              "heart",
        +              "smile",
        +              "light-bulb",
        +              "sun",
        +              "moon",
        +              "gift",
        +              "tag",
        +              "percent",
        +              "dollar",
        +              "banknotes",
        +              "credit-card",
        +              "shopping-bag",
        +              "shopping-cart",
        +              "truck",
        +              "clock",
        +              "calendar",
        +              "bell",
        +              "megaphone",
        +              "trending-up",
        +              "chart",
        +              "refresh",
        +              "lock",
        +              "key",
        +              "ticket",
        +              "users",
        +              "academic-cap",
        +              "book",
        +              "music",
        +              "video",
        +              "document",
        +              "download",
        +              "mobile",
        +              "camera",
        +              "paint-brush",
        +              "puzzle",
        +              "cube",
        +              "globe",
        +              "map-pin",
        +              "storefront",
        +              "tools",
        +              "beaker",
        +              "lifebuoy",
        +              "chat",
        +              "envelope",
        +              "phone",
        +              "cake",
        +              "scale",
        +              "eye"
        +            ],
        +            "example": "star",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Icon leading the call out box."
        +      },
        +      "calloutText": {
        +        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdAt": {
        +        "description": "ISO 8601 timestamp when the product was created.",
        +        "type": "string"
        +      },
        +      "defaultPriceId": {
        +        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "description": "Product description as HTML.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "checkout_quantity",
        +                    "variant_option_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "variantOptionIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Bulk discount tiers."
        +      },
        +      "enableFileAccessForInactiveSubscriptions": {
        +        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "features": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "icon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon leading a feature line, or `none` for no icon.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye",
        +                        "none"
        +                      ],
        +                      "example": "check-circle",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        +                },
        +                "text": {
        +                  "description": "One line of the list.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "text"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        +      },
        +      "fileIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Applied Tax Rate IDs for this product."
        +      },
        +      "generateLicenseKeys": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "hasUnlimitedStock": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "headingText": {
        +        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the product.",
        +        "type": "string"
        +      },
        +      "limitPayments": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        +      },
        +      "limitSubscriptions": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "limitSubscriptionsStripe": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "enabled": {
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-subscription prevention settings for this product."
        +      },
        +      "media": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "fileId": {
        +                  "description": "File ID of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "height": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "size": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "url": {
        +                  "description": "CDN URL of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "width": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product images."
        +      },
        +      "price": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount": {
        +            "description": "Price in smallest currency unit (cents).",
        +            "example": 4900,
        +            "type": "number"
        +          },
        +          "currency": {
        +            "description": "Lowercase ISO 4217 currency code.",
        +            "example": "usd",
        +            "type": "string"
        +          },
        +          "discountedFromPrice": {
        +            "description": "Original price before discount, in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "payWhatYouWant": {
        +            "description": "Whether pay-what-you-want pricing is enabled.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "paymentPlan": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "planIterations": {
        +                    "description": "Number of billing cycles after which the plan completes.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +          },
        +          "pricingType": {
        +            "anyOf": [
        +              {
        +                "description": "Pricing type for this product - single price or multiple prices using variants.",
        +                "enum": [
        +                  "single",
        +                  "multiple"
        +                ],
        +                "example": "single",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "deprecated": true,
        +            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        +            "example": "single"
        +          },
        +          "recurring": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Recurring billing configuration. Never present together with paymentPlan."
        +          },
        +          "setupFee": {
        +            "description": "One-time setup fee in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "setupFeeMultipliesWithQuantity": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "amount",
        +          "currency"
        +        ],
        +        "type": "object"
        +      },
        +      "pricePicker": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "description": "Text shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "priceDisplayDefaults": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "string"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayLabels": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayTabOrder": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "shortenDescription": {
        +                "description": "Whether long price descriptions are cut behind a Show more link.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "Heading shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        +      },
        +      "prices": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "A single price entry on a multi-price product.",
        +              "properties": {
        +                "amount": {
        +                  "description": "Price in smallest currency unit (cents).",
        +                  "example": 4900,
        +                  "type": "number"
        +                },
        +                "badge": {
        +                  "description": "Optional short label shown over the price card.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "badgeIcon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon shown before the badge text.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye"
        +                      ],
        +                      "example": "star",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Optional icon shown before the badge text."
        +                },
        +                "billingType": {
        +                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +                  "enum": [
        +                    "one_time",
        +                    "recurring"
        +                  ],
        +                  "example": "one_time",
        +                  "type": "string"
        +                },
        +                "currency": {
        +                  "description": "Lowercase ISO 4217 currency code.",
        +                  "example": "usd",
        +                  "type": "string"
        +                },
        +                "discountedFromPrice": {
        +                  "description": "Original price before discount, in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "enabled": {
        +                  "description": "Whether this price is selectable by customers.",
        +                  "type": "boolean"
        +                },
        +                "hidden": {
        +                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "description": "Unique price identifier.",
        +                  "example": "507f1f77bcf86cd799439011",
        +                  "type": "string"
        +                },
        +                "isDefault": {
        +                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "order": {
        +                  "description": "Dashboard display order.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "payWhatYouWant": {
        +                  "description": "Whether pay-what-you-want pricing is enabled.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "paymentPlan": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "planIterations": {
        +                          "description": "Number of billing cycles after which the plan completes.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +                },
        +                "pwywSuggestedPrice": {
        +                  "description": "Suggested price in cents for PWYW prices.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "recurring": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        +                },
        +                "reference": {
        +                  "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "setupFee": {
        +                  "description": "One-time setup fee in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "setupFeeMultipliesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "amount",
        +                "currency",
        +                "id",
        +                "enabled",
        +                "isDefault",
        +                "billingType"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        +      },
        +      "role": {
        +        "anyOf": [
        +          {
        +            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        +            "enum": [
        +              "product",
        +              "orderbump"
        +            ],
        +            "example": "product",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "shortDescription": {
        +        "description": "Plain-text one-liner, shown where the full description is too long.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sku": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "stock": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "example": "exclusive",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Product title.",
        +        "example": "Premium Course",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Product type.",
        +        "enum": [
        +          "charge",
        +          "subscription"
        +        ],
        +        "example": "charge",
        +        "type": "string"
        +      },
        +      "updatedAt": {
        +        "description": "ISO 8601 timestamp when the product was last updated.",
        +        "type": "string"
        +      },
        +      "variants": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "hidden": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "increasesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "layout": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "collapseVariantOptions": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "imageSize": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "small",
        +                                "medium",
        +                                "large",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "showPwywPlaceholder": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantName": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionNames": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPriceSign": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPrices": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "spacing": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "comfortable",
        +                                "compact",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "textAlign": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "left",
        +                                "center",
        +                                "stack",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "variantOptionColumns": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "variantOptionLayout": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "list",
        +                                "grid"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "manageVariantOptionStock": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "options": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "additionalChargeAmount": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "description": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "fileIds": {
        +                            "anyOf": [
        +                              {
        +                                "items": {
        +                                  "pattern": "^[0-9a-fA-F]{24}$",
        +                                  "type": "string"
        +                                },
        +                                "type": "array"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "id": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "image": {
        +                            "anyOf": [
        +                              {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "fileId": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "height": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "name": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "size": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "url": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "width": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  }
        +                                },
        +                                "type": "object"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "name": {
        +                            "type": "string"
        +                          },
        +                          "payWhatYouWant": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "pwywSuggestedPrice": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "sku": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "status": {
        +                            "anyOf": [
        +                              {
        +                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                                "enum": [
        +                                  "enabled",
        +                                  "disabled",
        +                                  "deleted"
        +                                ],
        +                                "example": "enabled",
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "stock": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "type": {
        +                            "anyOf": [
        +                              {
        +                                "enum": [
        +                                  "one_time",
        +                                  "recurring",
        +                                  "pay_what_you_want"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "required": [
        +                          "name"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "order": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "preselect": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "optionId": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "quantity": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "priceIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        +                },
        +                "reference": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "required": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "selectionType": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +                      "enum": [
        +                        "single",
        +                        "multiple",
        +                        "quantity"
        +                      ],
        +                      "example": "single",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "showHideLogic": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "comparison": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "is",
        +                                "is_not",
        +                                "is_empty",
        +                                "is_not_empty",
        +                                "contains"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "element": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "elementId": {
        +                                  "type": [
        +                                    "string",
        +                                    "null"
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "value": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "status": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                      "enum": [
        +                        "enabled",
        +                        "disabled",
        +                        "deleted"
        +                      ],
        +                      "example": "enabled",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "useVariantOptionSkus": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "name"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product variants."
        +      },
        +      "variantsRequired": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "type",
        +      "title",
        +      "price",
        +      "createdAt",
        +      "updatedAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_event1 field changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedget_form1 field changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedget_product1 field changed
      • changedOutput schema / properties / data / properties / prices / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "description": "A single price entry on a multi-price product.",
        -      "properties": {
        -        "amount": {
        -          "description": "Price in smallest currency unit (cents).",
        -          "example": 4900,
        -          "type": "number"
        -        },
        -        "badge": {
        -          "description": "Optional short label shown over the price card.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "badgeIcon": {
        -          "anyOf": [
        -            {
        -              "description": "Icon shown before the badge text.",
        -              "enum": [
        -                "star",
        -                "sparkles",
        -                "fire",
        -                "bolt",
        -                "rocket",
        -                "trophy",
        -                "check",
        -                "x-mark",
        -                "plus",
        -                "arrow-right",
        -                "check-badge",
        -                "check-circle",
        -                "shield-check",
        -                "thumbs-up",
        -                "heart",
        -                "smile",
        -                "light-bulb",
        -                "sun",
        -                "moon",
        -                "gift",
        -                "tag",
        -                "percent",
        -                "dollar",
        -                "banknotes",
        -                "credit-card",
        -                "shopping-bag",
        -                "shopping-cart",
        -                "truck",
        -                "clock",
        -                "calendar",
        -                "bell",
        -                "megaphone",
        -                "trending-up",
        -                "chart",
        -                "refresh",
        -                "lock",
        -                "key",
        -                "ticket",
        -                "users",
        -                "academic-cap",
        -                "book",
        -                "music",
        -                "video",
        -                "document",
        -                "download",
        -                "mobile",
        -                "camera",
        -                "paint-brush",
        -                "puzzle",
        -                "cube",
        -                "globe",
        -                "map-pin",
        -                "storefront",
        -                "tools",
        -                "beaker",
        -                "lifebuoy",
        -                "chat",
        -                "envelope",
        -                "phone",
        -                "cake",
        -                "scale",
        -                "eye"
        -              ],
        -              "example": "star",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Optional icon shown before the badge text."
        -        },
        -        "billingType": {
        -          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -          "enum": [
        -            "one_time",
        -            "recurring"
        -          ],
        -          "example": "one_time",
        -          "type": "string"
        -        },
        -        "currency": {
        -          "description": "Lowercase ISO 4217 currency code.",
        -          "example": "usd",
        -          "type": "string"
        -        },
        -        "discountedFromPrice": {
        -          "description": "Original price before discount, in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "enabled": {
        -          "description": "Whether this price is selectable by customers.",
        -          "type": "boolean"
        -        },
        -        "hidden": {
        -          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "Unique price identifier.",
        -          "example": "507f1f77bcf86cd799439011",
        -          "type": "string"
        -        },
        -        "isDefault": {
        -          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -          "type": "boolean"
        -        },
        -        "label": {
        -          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order": {
        -          "description": "Dashboard display order.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "payWhatYouWant": {
        -          "description": "Whether pay-what-you-want pricing is enabled.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "paymentPlan": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "planIterations": {
        -                  "description": "Number of billing cycles after which the plan completes.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -        },
        -        "pwywSuggestedPrice": {
        -          "description": "Suggested price in cents for PWYW prices.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "recurring": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Recurring billing configuration. Never present together with paymentPlan."
        -        },
        -        "reference": {
        -          "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "setupFee": {
        -          "description": "One-time setup fee in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "setupFeeMultipliesWithQuantity": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "amount",
        -        "currency",
        -        "id",
        -        "enabled",
        -        "isDefault",
        -        "billingType"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "A single price entry on a multi-price product.",
        +      "properties": {
        +        "amount": {
        +          "description": "Price in smallest currency unit (cents).",
        +          "example": 4900,
        +          "type": "number"
        +        },
        +        "badge": {
        +          "description": "Optional short label shown over the price card.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "badgeIcon": {
        +          "anyOf": [
        +            {
        +              "description": "Icon shown before the badge text.",
        +              "enum": [
        +                "star",
        +                "sparkles",
        +                "fire",
        +                "bolt",
        +                "rocket",
        +                "trophy",
        +                "check",
        +                "x-mark",
        +                "plus",
        +                "arrow-right",
        +                "check-badge",
        +                "check-circle",
        +                "shield-check",
        +                "thumbs-up",
        +                "heart",
        +                "smile",
        +                "light-bulb",
        +                "sun",
        +                "moon",
        +                "gift",
        +                "tag",
        +                "percent",
        +                "dollar",
        +                "banknotes",
        +                "credit-card",
        +                "shopping-bag",
        +                "shopping-cart",
        +                "truck",
        +                "clock",
        +                "calendar",
        +                "bell",
        +                "megaphone",
        +                "trending-up",
        +                "chart",
        +                "refresh",
        +                "lock",
        +                "key",
        +                "ticket",
        +                "users",
        +                "academic-cap",
        +                "book",
        +                "music",
        +                "video",
        +                "document",
        +                "download",
        +                "mobile",
        +                "camera",
        +                "paint-brush",
        +                "puzzle",
        +                "cube",
        +                "globe",
        +                "map-pin",
        +                "storefront",
        +                "tools",
        +                "beaker",
        +                "lifebuoy",
        +                "chat",
        +                "envelope",
        +                "phone",
        +                "cake",
        +                "scale",
        +                "eye"
        +              ],
        +              "example": "star",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Optional icon shown before the badge text."
        +        },
        +        "billingType": {
        +          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +          "enum": [
        +            "one_time",
        +            "recurring"
        +          ],
        +          "example": "one_time",
        +          "type": "string"
        +        },
        +        "currency": {
        +          "description": "Lowercase ISO 4217 currency code.",
        +          "example": "usd",
        +          "type": "string"
        +        },
        +        "discountedFromPrice": {
        +          "description": "Original price before discount, in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "enabled": {
        +          "description": "Whether this price is selectable by customers.",
        +          "type": "boolean"
        +        },
        +        "hidden": {
        +          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Unique price identifier.",
        +          "example": "507f1f77bcf86cd799439011",
        +          "type": "string"
        +        },
        +        "isDefault": {
        +          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +          "type": "boolean"
        +        },
        +        "label": {
        +          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "order": {
        +          "description": "Dashboard display order.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "payWhatYouWant": {
        +          "description": "Whether pay-what-you-want pricing is enabled.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "paymentPlan": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "planIterations": {
        +                  "description": "Number of billing cycles after which the plan completes.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +        },
        +        "pwywSuggestedPrice": {
        +          "description": "Suggested price in cents for PWYW prices.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "recurring": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Recurring billing configuration. Never present together with paymentPlan."
        +        },
        +        "reference": {
        +          "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "setupFee": {
        +          "description": "One-time setup fee in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "setupFeeMultipliesWithQuantity": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "id",
        +        "enabled",
        +        "isDefault",
        +        "billingType"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_checkout_pages2 fields changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
      • changedOutput schema / properties / data / items / properties / product / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "callToActionText": {
        -        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "calloutIcon": {
        -        "anyOf": [
        -          {
        -            "description": "Icon shown before the badge text.",
        -            "enum": [
        -              "star",
        -              "sparkles",
        -              "fire",
        -              "bolt",
        -              "rocket",
        -              "trophy",
        -              "check",
        -              "x-mark",
        -              "plus",
        -              "arrow-right",
        -              "check-badge",
        -              "check-circle",
        -              "shield-check",
        -              "thumbs-up",
        -              "heart",
        -              "smile",
        -              "light-bulb",
        -              "sun",
        -              "moon",
        -              "gift",
        -              "tag",
        -              "percent",
        -              "dollar",
        -              "banknotes",
        -              "credit-card",
        -              "shopping-bag",
        -              "shopping-cart",
        -              "truck",
        -              "clock",
        -              "calendar",
        -              "bell",
        -              "megaphone",
        -              "trending-up",
        -              "chart",
        -              "refresh",
        -              "lock",
        -              "key",
        -              "ticket",
        -              "users",
        -              "academic-cap",
        -              "book",
        -              "music",
        -              "video",
        -              "document",
        -              "download",
        -              "mobile",
        -              "camera",
        -              "paint-brush",
        -              "puzzle",
        -              "cube",
        -              "globe",
        -              "map-pin",
        -              "storefront",
        -              "tools",
        -              "beaker",
        -              "lifebuoy",
        -              "chat",
        -              "envelope",
        -              "phone",
        -              "cake",
        -              "scale",
        -              "eye"
        -            ],
        -            "example": "star",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Icon leading the call out box."
        -      },
        -      "calloutText": {
        -        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdAt": {
        -        "description": "ISO 8601 timestamp when the product was created.",
        -        "type": "string"
        -      },
        -      "defaultPriceId": {
        -        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "description": "Product description as HTML.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "checkout_quantity",
        -                    "variant_option_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "variantOptionIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Bulk discount tiers."
        -      },
        -      "enableFileAccessForInactiveSubscriptions": {
        -        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "features": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "icon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon leading a feature line, or `none` for no icon.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye",
        -                        "none"
        -                      ],
        -                      "example": "check-circle",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        -                },
        -                "text": {
        -                  "description": "One line of the list.",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "text"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        -      },
        -      "fileIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Applied Tax Rate IDs for this product."
        -      },
        -      "generateLicenseKeys": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "hasUnlimitedStock": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "headingText": {
        -        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the product.",
        -        "type": "string"
        -      },
        -      "limitPayments": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        -      },
        -      "limitSubscriptions": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "limitSubscriptionsStripe": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "enabled": {
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-subscription prevention settings for this product."
        -      },
        -      "media": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "fileId": {
        -                  "description": "File ID of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "height": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "size": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "url": {
        -                  "description": "CDN URL of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "width": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product images."
        -      },
        -      "price": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "amount": {
        -            "description": "Price in smallest currency unit (cents).",
        -            "example": 4900,
        -            "type": "number"
        -          },
        -          "currency": {
        -            "description": "Lowercase ISO 4217 currency code.",
        -            "example": "usd",
        -            "type": "string"
        -          },
        -          "discountedFromPrice": {
        -            "description": "Original price before discount, in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "payWhatYouWant": {
        -            "description": "Whether pay-what-you-want pricing is enabled.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "paymentPlan": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "planIterations": {
        -                    "description": "Number of billing cycles after which the plan completes.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -          },
        -          "pricingType": {
        -            "anyOf": [
        -              {
        -                "description": "Pricing type for this product - single price or multiple prices using variants.",
        -                "enum": [
        -                  "single",
        -                  "multiple"
        -                ],
        -                "example": "single",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "deprecated": true,
        -            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        -            "example": "single"
        -          },
        -          "recurring": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Recurring billing configuration. Never present together with paymentPlan."
        -          },
        -          "setupFee": {
        -            "description": "One-time setup fee in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "setupFeeMultipliesWithQuantity": {
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "amount",
        -          "currency"
        -        ],
        -        "type": "object"
        -      },
        -      "pricePicker": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "description": {
        -                "description": "Text shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "priceDisplayDefaults": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "type": "string"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayLabels": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "additionalProperties": {
        -                        "type": "string"
        -                      },
        -                      "propertyNames": {
        -                        "type": "string"
        -                      },
        -                      "type": "object"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayTabOrder": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "shortenDescription": {
        -                "description": "Whether long price descriptions are cut behind a Show more link.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "title": {
        -                "description": "Heading shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        -      },
        -      "prices": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "description": "A single price entry on a multi-price product.",
        -              "properties": {
        -                "amount": {
        -                  "description": "Price in smallest currency unit (cents).",
        -                  "example": 4900,
        -                  "type": "number"
        -                },
        -                "badge": {
        -                  "description": "Optional short label shown over the price card.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "badgeIcon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon shown before the badge text.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye"
        -                      ],
        -                      "example": "star",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Optional icon shown before the badge text."
        -                },
        -                "billingType": {
        -                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -                  "enum": [
        -                    "one_time",
        -                    "recurring"
        -                  ],
        -                  "example": "one_time",
        -                  "type": "string"
        -                },
        -                "currency": {
        -                  "description": "Lowercase ISO 4217 currency code.",
        -                  "example": "usd",
        -                  "type": "string"
        -                },
        -                "discountedFromPrice": {
        -                  "description": "Original price before discount, in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "enabled": {
        -                  "description": "Whether this price is selectable by customers.",
        -                  "type": "boolean"
        -                },
        -                "hidden": {
        -                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "description": "Unique price identifier.",
        -                  "example": "507f1f77bcf86cd799439011",
        -                  "type": "string"
        -                },
        -                "isDefault": {
        -                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -                  "type": "boolean"
        -                },
        -                "label": {
        -                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "order": {
        -                  "description": "Dashboard display order.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "payWhatYouWant": {
        -                  "description": "Whether pay-what-you-want pricing is enabled.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "paymentPlan": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "planIterations": {
        -                          "description": "Number of billing cycles after which the plan completes.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -                },
        -                "pwywSuggestedPrice": {
        -                  "description": "Suggested price in cents for PWYW prices.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "recurring": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        -                },
        -                "reference": {
        -                  "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "setupFee": {
        -                  "description": "One-time setup fee in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "setupFeeMultipliesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "amount",
        -                "currency",
        -                "id",
        -                "enabled",
        -                "isDefault",
        -                "billingType"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        -            "enum": [
        -              "product",
        -              "orderbump"
        -            ],
        -            "example": "product",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "shortDescription": {
        -        "description": "Plain-text one-liner, shown where the full description is too long.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sku": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "stock": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "example": "exclusive",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "description": "Product title.",
        -        "example": "Premium Course",
        -        "type": "string"
        -      },
        -      "type": {
        -        "description": "Product type.",
        -        "enum": [
        -          "charge",
        -          "subscription"
        -        ],
        -        "example": "charge",
        -        "type": "string"
        -      },
        -      "updatedAt": {
        -        "description": "ISO 8601 timestamp when the product was last updated.",
        -        "type": "string"
        -      },
        -      "variants": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "hidden": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "increasesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "layout": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "collapseVariantOptions": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "imageSize": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "small",
        -                                "medium",
        -                                "large",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "showPwywPlaceholder": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantName": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionNames": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPriceSign": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPrices": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "spacing": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "comfortable",
        -                                "compact",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "textAlign": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "left",
        -                                "center",
        -                                "stack",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "variantOptionColumns": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "variantOptionLayout": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "list",
        -                                "grid"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "manageVariantOptionStock": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": "string"
        -                },
        -                "options": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "additionalChargeAmount": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "description": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "fileIds": {
        -                            "anyOf": [
        -                              {
        -                                "items": {
        -                                  "pattern": "^[0-9a-fA-F]{24}$",
        -                                  "type": "string"
        -                                },
        -                                "type": "array"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "id": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "image": {
        -                            "anyOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "fileId": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "height": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "name": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "size": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "url": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "width": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  }
        -                                },
        -                                "type": "object"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "name": {
        -                            "type": "string"
        -                          },
        -                          "payWhatYouWant": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "pwywSuggestedPrice": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "sku": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "status": {
        -                            "anyOf": [
        -                              {
        -                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                                "enum": [
        -                                  "enabled",
        -                                  "disabled",
        -                                  "deleted"
        -                                ],
        -                                "example": "enabled",
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "stock": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "type": {
        -                            "anyOf": [
        -                              {
        -                                "enum": [
        -                                  "one_time",
        -                                  "recurring",
        -                                  "pay_what_you_want"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "required": [
        -                          "name"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "order": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "preselect": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "optionId": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        },
        -                        "quantity": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "priceIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        -                },
        -                "reference": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "required": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "selectionType": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -                      "enum": [
        -                        "single",
        -                        "multiple",
        -                        "quantity"
        -                      ],
        -                      "example": "single",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "showHideLogic": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "comparison": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "is",
        -                                "is_not",
        -                                "is_empty",
        -                                "is_not_empty",
        -                                "contains"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "element": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "elementId": {
        -                                  "type": [
        -                                    "string",
        -                                    "null"
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "value": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "status": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                      "enum": [
        -                        "enabled",
        -                        "disabled",
        -                        "deleted"
        -                      ],
        -                      "example": "enabled",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "useVariantOptionSkus": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "name"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product variants."
        -      },
        -      "variantsRequired": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "title",
        -      "price",
        -      "createdAt",
        -      "updatedAt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "callToActionText": {
        +        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "calloutIcon": {
        +        "anyOf": [
        +          {
        +            "description": "Icon shown before the badge text.",
        +            "enum": [
        +              "star",
        +              "sparkles",
        +              "fire",
        +              "bolt",
        +              "rocket",
        +              "trophy",
        +              "check",
        +              "x-mark",
        +              "plus",
        +              "arrow-right",
        +              "check-badge",
        +              "check-circle",
        +              "shield-check",
        +              "thumbs-up",
        +              "heart",
        +              "smile",
        +              "light-bulb",
        +              "sun",
        +              "moon",
        +              "gift",
        +              "tag",
        +              "percent",
        +              "dollar",
        +              "banknotes",
        +              "credit-card",
        +              "shopping-bag",
        +              "shopping-cart",
        +              "truck",
        +              "clock",
        +              "calendar",
        +              "bell",
        +              "megaphone",
        +              "trending-up",
        +              "chart",
        +              "refresh",
        +              "lock",
        +              "key",
        +              "ticket",
        +              "users",
        +              "academic-cap",
        +              "book",
        +              "music",
        +              "video",
        +              "document",
        +              "download",
        +              "mobile",
        +              "camera",
        +              "paint-brush",
        +              "puzzle",
        +              "cube",
        +              "globe",
        +              "map-pin",
        +              "storefront",
        +              "tools",
        +              "beaker",
        +              "lifebuoy",
        +              "chat",
        +              "envelope",
        +              "phone",
        +              "cake",
        +              "scale",
        +              "eye"
        +            ],
        +            "example": "star",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Icon leading the call out box."
        +      },
        +      "calloutText": {
        +        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdAt": {
        +        "description": "ISO 8601 timestamp when the product was created.",
        +        "type": "string"
        +      },
        +      "defaultPriceId": {
        +        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "description": "Product description as HTML.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "checkout_quantity",
        +                    "variant_option_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "variantOptionIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Bulk discount tiers."
        +      },
        +      "enableFileAccessForInactiveSubscriptions": {
        +        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "features": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "icon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon leading a feature line, or `none` for no icon.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye",
        +                        "none"
        +                      ],
        +                      "example": "check-circle",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        +                },
        +                "text": {
        +                  "description": "One line of the list.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "text"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        +      },
        +      "fileIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Applied Tax Rate IDs for this product."
        +      },
        +      "generateLicenseKeys": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "hasUnlimitedStock": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "headingText": {
        +        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the product.",
        +        "type": "string"
        +      },
        +      "limitPayments": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        +      },
        +      "limitSubscriptions": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "limitSubscriptionsStripe": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "enabled": {
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-subscription prevention settings for this product."
        +      },
        +      "media": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "fileId": {
        +                  "description": "File ID of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "height": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "size": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "url": {
        +                  "description": "CDN URL of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "width": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product images."
        +      },
        +      "price": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount": {
        +            "description": "Price in smallest currency unit (cents).",
        +            "example": 4900,
        +            "type": "number"
        +          },
        +          "currency": {
        +            "description": "Lowercase ISO 4217 currency code.",
        +            "example": "usd",
        +            "type": "string"
        +          },
        +          "discountedFromPrice": {
        +            "description": "Original price before discount, in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "payWhatYouWant": {
        +            "description": "Whether pay-what-you-want pricing is enabled.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "paymentPlan": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "planIterations": {
        +                    "description": "Number of billing cycles after which the plan completes.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +          },
        +          "pricingType": {
        +            "anyOf": [
        +              {
        +                "description": "Pricing type for this product - single price or multiple prices using variants.",
        +                "enum": [
        +                  "single",
        +                  "multiple"
        +                ],
        +                "example": "single",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "deprecated": true,
        +            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        +            "example": "single"
        +          },
        +          "recurring": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Recurring billing configuration. Never present together with paymentPlan."
        +          },
        +          "setupFee": {
        +            "description": "One-time setup fee in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "setupFeeMultipliesWithQuantity": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "amount",
        +          "currency"
        +        ],
        +        "type": "object"
        +      },
        +      "pricePicker": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "description": "Text shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "priceDisplayDefaults": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "string"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayLabels": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayTabOrder": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "shortenDescription": {
        +                "description": "Whether long price descriptions are cut behind a Show more link.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "Heading shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        +      },
        +      "prices": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "A single price entry on a multi-price product.",
        +              "properties": {
        +                "amount": {
        +                  "description": "Price in smallest currency unit (cents).",
        +                  "example": 4900,
        +                  "type": "number"
        +                },
        +                "badge": {
        +                  "description": "Optional short label shown over the price card.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "badgeIcon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon shown before the badge text.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye"
        +                      ],
        +                      "example": "star",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Optional icon shown before the badge text."
        +                },
        +                "billingType": {
        +                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +                  "enum": [
        +                    "one_time",
        +                    "recurring"
        +                  ],
        +                  "example": "one_time",
        +                  "type": "string"
        +                },
        +                "currency": {
        +                  "description": "Lowercase ISO 4217 currency code.",
        +                  "example": "usd",
        +                  "type": "string"
        +                },
        +                "discountedFromPrice": {
        +                  "description": "Original price before discount, in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "enabled": {
        +                  "description": "Whether this price is selectable by customers.",
        +                  "type": "boolean"
        +                },
        +                "hidden": {
        +                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "description": "Unique price identifier.",
        +                  "example": "507f1f77bcf86cd799439011",
        +                  "type": "string"
        +                },
        +                "isDefault": {
        +                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "order": {
        +                  "description": "Dashboard display order.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "payWhatYouWant": {
        +                  "description": "Whether pay-what-you-want pricing is enabled.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "paymentPlan": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "planIterations": {
        +                          "description": "Number of billing cycles after which the plan completes.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +                },
        +                "pwywSuggestedPrice": {
        +                  "description": "Suggested price in cents for PWYW prices.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "recurring": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        +                },
        +                "reference": {
        +                  "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "setupFee": {
        +                  "description": "One-time setup fee in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "setupFeeMultipliesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "amount",
        +                "currency",
        +                "id",
        +                "enabled",
        +                "isDefault",
        +                "billingType"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        +      },
        +      "role": {
        +        "anyOf": [
        +          {
        +            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        +            "enum": [
        +              "product",
        +              "orderbump"
        +            ],
        +            "example": "product",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "shortDescription": {
        +        "description": "Plain-text one-liner, shown where the full description is too long.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sku": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "stock": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "example": "exclusive",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Product title.",
        +        "example": "Premium Course",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Product type.",
        +        "enum": [
        +          "charge",
        +          "subscription"
        +        ],
        +        "example": "charge",
        +        "type": "string"
        +      },
        +      "updatedAt": {
        +        "description": "ISO 8601 timestamp when the product was last updated.",
        +        "type": "string"
        +      },
        +      "variants": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "hidden": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "increasesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "layout": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "collapseVariantOptions": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "imageSize": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "small",
        +                                "medium",
        +                                "large",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "showPwywPlaceholder": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantName": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionNames": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPriceSign": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPrices": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "spacing": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "comfortable",
        +                                "compact",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "textAlign": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "left",
        +                                "center",
        +                                "stack",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "variantOptionColumns": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "variantOptionLayout": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "list",
        +                                "grid"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "manageVariantOptionStock": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "options": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "additionalChargeAmount": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "description": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "fileIds": {
        +                            "anyOf": [
        +                              {
        +                                "items": {
        +                                  "pattern": "^[0-9a-fA-F]{24}$",
        +                                  "type": "string"
        +                                },
        +                                "type": "array"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "id": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "image": {
        +                            "anyOf": [
        +                              {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "fileId": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "height": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "name": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "size": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "url": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "width": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  }
        +                                },
        +                                "type": "object"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "name": {
        +                            "type": "string"
        +                          },
        +                          "payWhatYouWant": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "pwywSuggestedPrice": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "sku": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "status": {
        +                            "anyOf": [
        +                              {
        +                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                                "enum": [
        +                                  "enabled",
        +                                  "disabled",
        +                                  "deleted"
        +                                ],
        +                                "example": "enabled",
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "stock": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "type": {
        +                            "anyOf": [
        +                              {
        +                                "enum": [
        +                                  "one_time",
        +                                  "recurring",
        +                                  "pay_what_you_want"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "required": [
        +                          "name"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "order": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "preselect": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "optionId": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "quantity": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "priceIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        +                },
        +                "reference": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "required": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "selectionType": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +                      "enum": [
        +                        "single",
        +                        "multiple",
        +                        "quantity"
        +                      ],
        +                      "example": "single",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "showHideLogic": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "comparison": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "is",
        +                                "is_not",
        +                                "is_empty",
        +                                "is_not_empty",
        +                                "contains"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "element": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "elementId": {
        +                                  "type": [
        +                                    "string",
        +                                    "null"
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "value": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "status": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                      "enum": [
        +                        "enabled",
        +                        "disabled",
        +                        "deleted"
        +                      ],
        +                      "example": "enabled",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "useVariantOptionSkus": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "name"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product variants."
        +      },
        +      "variantsRequired": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "type",
        +      "title",
        +      "price",
        +      "createdAt",
        +      "updatedAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_events1 field changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedlist_forms1 field changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedlist_products1 field changed
      • changedOutput schema / properties / data / items / properties / prices / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "description": "A single price entry on a multi-price product.",
        -      "properties": {
        -        "amount": {
        -          "description": "Price in smallest currency unit (cents).",
        -          "example": 4900,
        -          "type": "number"
        -        },
        -        "badge": {
        -          "description": "Optional short label shown over the price card.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "badgeIcon": {
        -          "anyOf": [
        -            {
        -              "description": "Icon shown before the badge text.",
        -              "enum": [
        -                "star",
        -                "sparkles",
        -                "fire",
        -                "bolt",
        -                "rocket",
        -                "trophy",
        -                "check",
        -                "x-mark",
        -                "plus",
        -                "arrow-right",
        -                "check-badge",
        -                "check-circle",
        -                "shield-check",
        -                "thumbs-up",
        -                "heart",
        -                "smile",
        -                "light-bulb",
        -                "sun",
        -                "moon",
        -                "gift",
        -                "tag",
        -                "percent",
        -                "dollar",
        -                "banknotes",
        -                "credit-card",
        -                "shopping-bag",
        -                "shopping-cart",
        -                "truck",
        -                "clock",
        -                "calendar",
        -                "bell",
        -                "megaphone",
        -                "trending-up",
        -                "chart",
        -                "refresh",
        -                "lock",
        -                "key",
        -                "ticket",
        -                "users",
        -                "academic-cap",
        -                "book",
        -                "music",
        -                "video",
        -                "document",
        -                "download",
        -                "mobile",
        -                "camera",
        -                "paint-brush",
        -                "puzzle",
        -                "cube",
        -                "globe",
        -                "map-pin",
        -                "storefront",
        -                "tools",
        -                "beaker",
        -                "lifebuoy",
        -                "chat",
        -                "envelope",
        -                "phone",
        -                "cake",
        -                "scale",
        -                "eye"
        -              ],
        -              "example": "star",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Optional icon shown before the badge text."
        -        },
        -        "billingType": {
        -          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -          "enum": [
        -            "one_time",
        -            "recurring"
        -          ],
        -          "example": "one_time",
        -          "type": "string"
        -        },
        -        "currency": {
        -          "description": "Lowercase ISO 4217 currency code.",
        -          "example": "usd",
        -          "type": "string"
        -        },
        -        "discountedFromPrice": {
        -          "description": "Original price before discount, in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "enabled": {
        -          "description": "Whether this price is selectable by customers.",
        -          "type": "boolean"
        -        },
        -        "hidden": {
        -          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "Unique price identifier.",
        -          "example": "507f1f77bcf86cd799439011",
        -          "type": "string"
        -        },
        -        "isDefault": {
        -          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -          "type": "boolean"
        -        },
        -        "label": {
        -          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order": {
        -          "description": "Dashboard display order.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "payWhatYouWant": {
        -          "description": "Whether pay-what-you-want pricing is enabled.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "paymentPlan": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "planIterations": {
        -                  "description": "Number of billing cycles after which the plan completes.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -        },
        -        "pwywSuggestedPrice": {
        -          "description": "Suggested price in cents for PWYW prices.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "recurring": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Recurring billing configuration. Never present together with paymentPlan."
        -        },
        -        "reference": {
        -          "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "setupFee": {
        -          "description": "One-time setup fee in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "setupFeeMultipliesWithQuantity": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "amount",
        -        "currency",
        -        "id",
        -        "enabled",
        -        "isDefault",
        -        "billingType"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "A single price entry on a multi-price product.",
        +      "properties": {
        +        "amount": {
        +          "description": "Price in smallest currency unit (cents).",
        +          "example": 4900,
        +          "type": "number"
        +        },
        +        "badge": {
        +          "description": "Optional short label shown over the price card.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "badgeIcon": {
        +          "anyOf": [
        +            {
        +              "description": "Icon shown before the badge text.",
        +              "enum": [
        +                "star",
        +                "sparkles",
        +                "fire",
        +                "bolt",
        +                "rocket",
        +                "trophy",
        +                "check",
        +                "x-mark",
        +                "plus",
        +                "arrow-right",
        +                "check-badge",
        +                "check-circle",
        +                "shield-check",
        +                "thumbs-up",
        +                "heart",
        +                "smile",
        +                "light-bulb",
        +                "sun",
        +                "moon",
        +                "gift",
        +                "tag",
        +                "percent",
        +                "dollar",
        +                "banknotes",
        +                "credit-card",
        +                "shopping-bag",
        +                "shopping-cart",
        +                "truck",
        +                "clock",
        +                "calendar",
        +                "bell",
        +                "megaphone",
        +                "trending-up",
        +                "chart",
        +                "refresh",
        +                "lock",
        +                "key",
        +                "ticket",
        +                "users",
        +                "academic-cap",
        +                "book",
        +                "music",
        +                "video",
        +                "document",
        +                "download",
        +                "mobile",
        +                "camera",
        +                "paint-brush",
        +                "puzzle",
        +                "cube",
        +                "globe",
        +                "map-pin",
        +                "storefront",
        +                "tools",
        +                "beaker",
        +                "lifebuoy",
        +                "chat",
        +                "envelope",
        +                "phone",
        +                "cake",
        +                "scale",
        +                "eye"
        +              ],
        +              "example": "star",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Optional icon shown before the badge text."
        +        },
        +        "billingType": {
        +          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +          "enum": [
        +            "one_time",
        +            "recurring"
        +          ],
        +          "example": "one_time",
        +          "type": "string"
        +        },
        +        "currency": {
        +          "description": "Lowercase ISO 4217 currency code.",
        +          "example": "usd",
        +          "type": "string"
        +        },
        +        "discountedFromPrice": {
        +          "description": "Original price before discount, in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "enabled": {
        +          "description": "Whether this price is selectable by customers.",
        +          "type": "boolean"
        +        },
        +        "hidden": {
        +          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Unique price identifier.",
        +          "example": "507f1f77bcf86cd799439011",
        +          "type": "string"
        +        },
        +        "isDefault": {
        +          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +          "type": "boolean"
        +        },
        +        "label": {
        +          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "order": {
        +          "description": "Dashboard display order.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "payWhatYouWant": {
        +          "description": "Whether pay-what-you-want pricing is enabled.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "paymentPlan": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "planIterations": {
        +                  "description": "Number of billing cycles after which the plan completes.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +        },
        +        "pwywSuggestedPrice": {
        +          "description": "Suggested price in cents for PWYW prices.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "recurring": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Recurring billing configuration. Never present together with paymentPlan."
        +        },
        +        "reference": {
        +          "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "setupFee": {
        +          "description": "One-time setup fee in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "setupFeeMultipliesWithQuantity": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "id",
        +        "enabled",
        +        "isDefault",
        +        "billingType"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_checkout_page2 fields changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
      • changedOutput schema / properties / data / properties / product / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "callToActionText": {
        -        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "calloutIcon": {
        -        "anyOf": [
        -          {
        -            "description": "Icon shown before the badge text.",
        -            "enum": [
        -              "star",
        -              "sparkles",
        -              "fire",
        -              "bolt",
        -              "rocket",
        -              "trophy",
        -              "check",
        -              "x-mark",
        -              "plus",
        -              "arrow-right",
        -              "check-badge",
        -              "check-circle",
        -              "shield-check",
        -              "thumbs-up",
        -              "heart",
        -              "smile",
        -              "light-bulb",
        -              "sun",
        -              "moon",
        -              "gift",
        -              "tag",
        -              "percent",
        -              "dollar",
        -              "banknotes",
        -              "credit-card",
        -              "shopping-bag",
        -              "shopping-cart",
        -              "truck",
        -              "clock",
        -              "calendar",
        -              "bell",
        -              "megaphone",
        -              "trending-up",
        -              "chart",
        -              "refresh",
        -              "lock",
        -              "key",
        -              "ticket",
        -              "users",
        -              "academic-cap",
        -              "book",
        -              "music",
        -              "video",
        -              "document",
        -              "download",
        -              "mobile",
        -              "camera",
        -              "paint-brush",
        -              "puzzle",
        -              "cube",
        -              "globe",
        -              "map-pin",
        -              "storefront",
        -              "tools",
        -              "beaker",
        -              "lifebuoy",
        -              "chat",
        -              "envelope",
        -              "phone",
        -              "cake",
        -              "scale",
        -              "eye"
        -            ],
        -            "example": "star",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Icon leading the call out box."
        -      },
        -      "calloutText": {
        -        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "createdAt": {
        -        "description": "ISO 8601 timestamp when the product was created.",
        -        "type": "string"
        -      },
        -      "defaultPriceId": {
        -        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "description": "Product description as HTML.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "amountOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "maxQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "minQuantity": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "percentOff": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "quantityCondition": {
        -                  "enum": [
        -                    "checkout_quantity",
        -                    "variant_option_quantity"
        -                  ],
        -                  "type": "string"
        -                },
        -                "variantOptionIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "quantityCondition"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Bulk discount tiers."
        -      },
        -      "enableFileAccessForInactiveSubscriptions": {
        -        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "features": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "icon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon leading a feature line, or `none` for no icon.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye",
        -                        "none"
        -                      ],
        -                      "example": "check-circle",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        -                },
        -                "text": {
        -                  "description": "One line of the list.",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "text"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        -      },
        -      "fileIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Applied Tax Rate IDs for this product."
        -      },
        -      "generateLicenseKeys": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "hasUnlimitedStock": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "headingText": {
        -        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "Unique identifier for the product.",
        -        "type": "string"
        -      },
        -      "limitPayments": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "enabledAt": {
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        -      },
        -      "limitSubscriptions": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "limitSubscriptionsStripe": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "enabled": {
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-subscription prevention settings for this product."
        -      },
        -      "media": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "fileId": {
        -                  "description": "File ID of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "height": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "size": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "url": {
        -                  "description": "CDN URL of the media asset.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "width": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product images."
        -      },
        -      "price": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "amount": {
        -            "description": "Price in smallest currency unit (cents).",
        -            "example": 4900,
        -            "type": "number"
        -          },
        -          "currency": {
        -            "description": "Lowercase ISO 4217 currency code.",
        -            "example": "usd",
        -            "type": "string"
        -          },
        -          "discountedFromPrice": {
        -            "description": "Original price before discount, in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "payWhatYouWant": {
        -            "description": "Whether pay-what-you-want pricing is enabled.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "paymentPlan": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "planIterations": {
        -                    "description": "Number of billing cycles after which the plan completes.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -          },
        -          "pricingType": {
        -            "anyOf": [
        -              {
        -                "description": "Pricing type for this product - single price or multiple prices using variants.",
        -                "enum": [
        -                  "single",
        -                  "multiple"
        -                ],
        -                "example": "single",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "deprecated": true,
        -            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        -            "example": "single"
        -          },
        -          "recurring": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "Day of month the billing cycle is anchored to."
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval (day, week, month, year).",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1,
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins."
        -                  },
        -                  "trialPeriodDays": {
        -                    "description": "Trial period in days.",
        -                    "type": [
        -                      "number",
        -                      "null"
        -                    ]
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Recurring billing configuration. Never present together with paymentPlan."
        -          },
        -          "setupFee": {
        -            "description": "One-time setup fee in cents.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "setupFeeMultipliesWithQuantity": {
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "amount",
        -          "currency"
        -        ],
        -        "type": "object"
        -      },
        -      "pricePicker": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "description": {
        -                "description": "Text shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "priceDisplayDefaults": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "type": "string"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayLabels": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "additionalProperties": {
        -                        "type": "string"
        -                      },
        -                      "propertyNames": {
        -                        "type": "string"
        -                      },
        -                      "type": "object"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "priceDisplayTabOrder": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "shortenDescription": {
        -                "description": "Whether long price descriptions are cut behind a Show more link.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "title": {
        -                "description": "Heading shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        -      },
        -      "prices": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "description": "A single price entry on a multi-price product.",
        -              "properties": {
        -                "amount": {
        -                  "description": "Price in smallest currency unit (cents).",
        -                  "example": 4900,
        -                  "type": "number"
        -                },
        -                "badge": {
        -                  "description": "Optional short label shown over the price card.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "badgeIcon": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Icon shown before the badge text.",
        -                      "enum": [
        -                        "star",
        -                        "sparkles",
        -                        "fire",
        -                        "bolt",
        -                        "rocket",
        -                        "trophy",
        -                        "check",
        -                        "x-mark",
        -                        "plus",
        -                        "arrow-right",
        -                        "check-badge",
        -                        "check-circle",
        -                        "shield-check",
        -                        "thumbs-up",
        -                        "heart",
        -                        "smile",
        -                        "light-bulb",
        -                        "sun",
        -                        "moon",
        -                        "gift",
        -                        "tag",
        -                        "percent",
        -                        "dollar",
        -                        "banknotes",
        -                        "credit-card",
        -                        "shopping-bag",
        -                        "shopping-cart",
        -                        "truck",
        -                        "clock",
        -                        "calendar",
        -                        "bell",
        -                        "megaphone",
        -                        "trending-up",
        -                        "chart",
        -                        "refresh",
        -                        "lock",
        -                        "key",
        -                        "ticket",
        -                        "users",
        -                        "academic-cap",
        -                        "book",
        -                        "music",
        -                        "video",
        -                        "document",
        -                        "download",
        -                        "mobile",
        -                        "camera",
        -                        "paint-brush",
        -                        "puzzle",
        -                        "cube",
        -                        "globe",
        -                        "map-pin",
        -                        "storefront",
        -                        "tools",
        -                        "beaker",
        -                        "lifebuoy",
        -                        "chat",
        -                        "envelope",
        -                        "phone",
        -                        "cake",
        -                        "scale",
        -                        "eye"
        -                      ],
        -                      "example": "star",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Optional icon shown before the badge text."
        -                },
        -                "billingType": {
        -                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -                  "enum": [
        -                    "one_time",
        -                    "recurring"
        -                  ],
        -                  "example": "one_time",
        -                  "type": "string"
        -                },
        -                "currency": {
        -                  "description": "Lowercase ISO 4217 currency code.",
        -                  "example": "usd",
        -                  "type": "string"
        -                },
        -                "discountedFromPrice": {
        -                  "description": "Original price before discount, in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "enabled": {
        -                  "description": "Whether this price is selectable by customers.",
        -                  "type": "boolean"
        -                },
        -                "hidden": {
        -                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "description": "Unique price identifier.",
        -                  "example": "507f1f77bcf86cd799439011",
        -                  "type": "string"
        -                },
        -                "isDefault": {
        -                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -                  "type": "boolean"
        -                },
        -                "label": {
        -                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "order": {
        -                  "description": "Dashboard display order.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "payWhatYouWant": {
        -                  "description": "Whether pay-what-you-want pricing is enabled.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "paymentPlan": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "planIterations": {
        -                          "description": "Number of billing cycles after which the plan completes.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -                },
        -                "pwywSuggestedPrice": {
        -                  "description": "Suggested price in cents for PWYW prices.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "recurring": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "billingCycleAnchorConfig": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "dayOfMonth": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 31,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ],
        -                                  "description": "Day of month the billing cycle is anchored to."
        -                                },
        -                                "enabled": {
        -                                  "type": [
        -                                    "boolean",
        -                                    "null"
        -                                  ]
        -                                },
        -                                "month": {
        -                                  "anyOf": [
        -                                    {
        -                                      "maximum": 12,
        -                                      "minimum": 1,
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "null"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "interval": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "day",
        -                                "week",
        -                                "month",
        -                                "year"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Billing interval (day, week, month, year).",
        -                          "example": "month"
        -                        },
        -                        "intervalCount": {
        -                          "description": "Number of intervals between billings.",
        -                          "example": 1,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "startDate": {
        -                          "anyOf": [
        -                            {
        -                              "format": "date-time",
        -                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "The date on which the subscription begins."
        -                        },
        -                        "trialPeriodDays": {
        -                          "description": "Trial period in days.",
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        -                },
        -                "reference": {
        -                  "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "setupFee": {
        -                  "description": "One-time setup fee in cents.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "setupFeeMultipliesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "amount",
        -                "currency",
        -                "id",
        -                "enabled",
        -                "isDefault",
        -                "billingType"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        -            "enum": [
        -              "product",
        -              "orderbump"
        -            ],
        -            "example": "product",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "shortDescription": {
        -        "description": "Plain-text one-liner, shown where the full description is too long.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "sku": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "stock": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "example": "exclusive",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "taxCode": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "description": "Product title.",
        -        "example": "Premium Course",
        -        "type": "string"
        -      },
        -      "type": {
        -        "description": "Product type.",
        -        "enum": [
        -          "charge",
        -          "subscription"
        -        ],
        -        "example": "charge",
        -        "type": "string"
        -      },
        -      "updatedAt": {
        -        "description": "ISO 8601 timestamp when the product was last updated.",
        -        "type": "string"
        -      },
        -      "variants": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "hidden": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "id": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "increasesWithQuantity": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "layout": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "collapseVariantOptions": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "imageSize": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "small",
        -                                "medium",
        -                                "large",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "showPwywPlaceholder": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantName": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionNames": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPriceSign": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPrices": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "spacing": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "comfortable",
        -                                "compact",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "textAlign": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "left",
        -                                "center",
        -                                "stack",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "variantOptionColumns": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        },
        -                        "variantOptionLayout": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "list",
        -                                "grid"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "manageVariantOptionStock": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "type": "string"
        -                },
        -                "options": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "additionalChargeAmount": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "description": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "fileIds": {
        -                            "anyOf": [
        -                              {
        -                                "items": {
        -                                  "pattern": "^[0-9a-fA-F]{24}$",
        -                                  "type": "string"
        -                                },
        -                                "type": "array"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "id": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "image": {
        -                            "anyOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "fileId": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "height": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "name": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "size": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "url": {
        -                                    "type": [
        -                                      "string",
        -                                      "null"
        -                                    ]
        -                                  },
        -                                  "width": {
        -                                    "type": [
        -                                      "number",
        -                                      "null"
        -                                    ]
        -                                  }
        -                                },
        -                                "type": "object"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "name": {
        -                            "type": "string"
        -                          },
        -                          "payWhatYouWant": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "pwywSuggestedPrice": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "sku": {
        -                            "type": [
        -                              "string",
        -                              "null"
        -                            ]
        -                          },
        -                          "status": {
        -                            "anyOf": [
        -                              {
        -                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                                "enum": [
        -                                  "enabled",
        -                                  "disabled",
        -                                  "deleted"
        -                                ],
        -                                "example": "enabled",
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          },
        -                          "stock": {
        -                            "type": [
        -                              "number",
        -                              "null"
        -                            ]
        -                          },
        -                          "type": {
        -                            "anyOf": [
        -                              {
        -                                "enum": [
        -                                  "one_time",
        -                                  "recurring",
        -                                  "pay_what_you_want"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "required": [
        -                          "name"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "order": {
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "preselect": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "optionId": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        },
        -                        "quantity": {
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "priceIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        -                },
        -                "reference": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "required": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "selectionType": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -                      "enum": [
        -                        "single",
        -                        "multiple",
        -                        "quantity"
        -                      ],
        -                      "example": "single",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "showHideLogic": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "comparison": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "is",
        -                                "is_not",
        -                                "is_empty",
        -                                "is_not_empty",
        -                                "contains"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "element": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "elementId": {
        -                                  "type": [
        -                                    "string",
        -                                    "null"
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "value": {
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "status": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                      "enum": [
        -                        "enabled",
        -                        "disabled",
        -                        "deleted"
        -                      ],
        -                      "example": "enabled",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "useVariantOptionSkus": {
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "name"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product variants."
        -      },
        -      "variantsRequired": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "title",
        -      "price",
        -      "createdAt",
        -      "updatedAt"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "callToActionText": {
        +        "description": "Accept copy shown on an order-bump card, e.g. \"Yes! Add gift wrapping\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "calloutIcon": {
        +        "anyOf": [
        +          {
        +            "description": "Icon shown before the badge text.",
        +            "enum": [
        +              "star",
        +              "sparkles",
        +              "fire",
        +              "bolt",
        +              "rocket",
        +              "trophy",
        +              "check",
        +              "x-mark",
        +              "plus",
        +              "arrow-right",
        +              "check-badge",
        +              "check-circle",
        +              "shield-check",
        +              "thumbs-up",
        +              "heart",
        +              "smile",
        +              "light-bulb",
        +              "sun",
        +              "moon",
        +              "gift",
        +              "tag",
        +              "percent",
        +              "dollar",
        +              "banknotes",
        +              "credit-card",
        +              "shopping-bag",
        +              "shopping-cart",
        +              "truck",
        +              "clock",
        +              "calendar",
        +              "bell",
        +              "megaphone",
        +              "trending-up",
        +              "chart",
        +              "refresh",
        +              "lock",
        +              "key",
        +              "ticket",
        +              "users",
        +              "academic-cap",
        +              "book",
        +              "music",
        +              "video",
        +              "document",
        +              "download",
        +              "mobile",
        +              "camera",
        +              "paint-brush",
        +              "puzzle",
        +              "cube",
        +              "globe",
        +              "map-pin",
        +              "storefront",
        +              "tools",
        +              "beaker",
        +              "lifebuoy",
        +              "chat",
        +              "envelope",
        +              "phone",
        +              "cake",
        +              "scale",
        +              "eye"
        +            ],
        +            "example": "star",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Icon leading the call out box."
        +      },
        +      "calloutText": {
        +        "description": "Call out box shown on an order-bump card under the description. Sanitised HTML: links and inline emphasis only.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "createdAt": {
        +        "description": "ISO 8601 timestamp when the product was created.",
        +        "type": "string"
        +      },
        +      "defaultPriceId": {
        +        "description": "The price pre-selected at checkout: the saved default while it is enabled, or the only enabled price. Null when the product has several prices and no default, so the buyer chooses one.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "description": "Product description as HTML.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "amountOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "maxQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "minQuantity": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "percentOff": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "quantityCondition": {
        +                  "enum": [
        +                    "checkout_quantity",
        +                    "variant_option_quantity"
        +                  ],
        +                  "type": "string"
        +                },
        +                "variantOptionIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "quantityCondition"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Bulk discount tiers."
        +      },
        +      "enableFileAccessForInactiveSubscriptions": {
        +        "description": "Whether customers with inactive subscriptions can still access file downloads.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "features": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "icon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon leading a feature line, or `none` for no icon.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye",
        +                        "none"
        +                      ],
        +                      "example": "check-circle",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Icon leading the line. Unset, the line leads with a check; `none` draws no icon."
        +                },
        +                "text": {
        +                  "description": "One line of the list.",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "text"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Short list of what the customer gets, shown on an order-bump card above the description."
        +      },
        +      "fileIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Applied Tax Rate IDs for this product."
        +      },
        +      "generateLicenseKeys": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "hasUnlimitedStock": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "headingText": {
        +        "description": "Heading shown above an order-bump card, e.g. \"Special one time offer\".",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "description": "Unique identifier for the product.",
        +        "type": "string"
        +      },
        +      "limitPayments": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "enabledAt": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        +      },
        +      "limitSubscriptions": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "limitSubscriptionsStripe": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "enabled": {
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-subscription prevention settings for this product."
        +      },
        +      "media": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "fileId": {
        +                  "description": "File ID of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "height": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "size": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "url": {
        +                  "description": "CDN URL of the media asset.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "width": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product images."
        +      },
        +      "price": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount": {
        +            "description": "Price in smallest currency unit (cents).",
        +            "example": 4900,
        +            "type": "number"
        +          },
        +          "currency": {
        +            "description": "Lowercase ISO 4217 currency code.",
        +            "example": "usd",
        +            "type": "string"
        +          },
        +          "discountedFromPrice": {
        +            "description": "Original price before discount, in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "payWhatYouWant": {
        +            "description": "Whether pay-what-you-want pricing is enabled.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "paymentPlan": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "planIterations": {
        +                    "description": "Number of billing cycles after which the plan completes.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +          },
        +          "pricingType": {
        +            "anyOf": [
        +              {
        +                "description": "Pricing type for this product - single price or multiple prices using variants.",
        +                "enum": [
        +                  "single",
        +                  "multiple"
        +                ],
        +                "example": "single",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "deprecated": true,
        +            "description": "Deprecated — superseded by `prices[]`. Retained for backward compatibility.",
        +            "example": "single"
        +          },
        +          "recurring": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of month the billing cycle is anchored to."
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval (day, week, month, year).",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1,
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins."
        +                  },
        +                  "trialPeriodDays": {
        +                    "description": "Trial period in days.",
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Recurring billing configuration. Never present together with paymentPlan."
        +          },
        +          "setupFee": {
        +            "description": "One-time setup fee in cents.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "setupFeeMultipliesWithQuantity": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "amount",
        +          "currency"
        +        ],
        +        "type": "object"
        +      },
        +      "pricePicker": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "description": "Text shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "priceDisplayDefaults": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "string"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayLabels": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "priceDisplayTabOrder": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "shortenDescription": {
        +                "description": "Whether long price descriptions are cut behind a Show more link.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "Heading shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        +      },
        +      "prices": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "description": "A single price entry on a multi-price product.",
        +              "properties": {
        +                "amount": {
        +                  "description": "Price in smallest currency unit (cents).",
        +                  "example": 4900,
        +                  "type": "number"
        +                },
        +                "badge": {
        +                  "description": "Optional short label shown over the price card.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "badgeIcon": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Icon shown before the badge text.",
        +                      "enum": [
        +                        "star",
        +                        "sparkles",
        +                        "fire",
        +                        "bolt",
        +                        "rocket",
        +                        "trophy",
        +                        "check",
        +                        "x-mark",
        +                        "plus",
        +                        "arrow-right",
        +                        "check-badge",
        +                        "check-circle",
        +                        "shield-check",
        +                        "thumbs-up",
        +                        "heart",
        +                        "smile",
        +                        "light-bulb",
        +                        "sun",
        +                        "moon",
        +                        "gift",
        +                        "tag",
        +                        "percent",
        +                        "dollar",
        +                        "banknotes",
        +                        "credit-card",
        +                        "shopping-bag",
        +                        "shopping-cart",
        +                        "truck",
        +                        "clock",
        +                        "calendar",
        +                        "bell",
        +                        "megaphone",
        +                        "trending-up",
        +                        "chart",
        +                        "refresh",
        +                        "lock",
        +                        "key",
        +                        "ticket",
        +                        "users",
        +                        "academic-cap",
        +                        "book",
        +                        "music",
        +                        "video",
        +                        "document",
        +                        "download",
        +                        "mobile",
        +                        "camera",
        +                        "paint-brush",
        +                        "puzzle",
        +                        "cube",
        +                        "globe",
        +                        "map-pin",
        +                        "storefront",
        +                        "tools",
        +                        "beaker",
        +                        "lifebuoy",
        +                        "chat",
        +                        "envelope",
        +                        "phone",
        +                        "cake",
        +                        "scale",
        +                        "eye"
        +                      ],
        +                      "example": "star",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Optional icon shown before the badge text."
        +                },
        +                "billingType": {
        +                  "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +                  "enum": [
        +                    "one_time",
        +                    "recurring"
        +                  ],
        +                  "example": "one_time",
        +                  "type": "string"
        +                },
        +                "currency": {
        +                  "description": "Lowercase ISO 4217 currency code.",
        +                  "example": "usd",
        +                  "type": "string"
        +                },
        +                "discountedFromPrice": {
        +                  "description": "Original price before discount, in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "enabled": {
        +                  "description": "Whether this price is selectable by customers.",
        +                  "type": "boolean"
        +                },
        +                "hidden": {
        +                  "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "description": "Unique price identifier.",
        +                  "example": "507f1f77bcf86cd799439011",
        +                  "type": "string"
        +                },
        +                "isDefault": {
        +                  "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +                  "type": "boolean"
        +                },
        +                "label": {
        +                  "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "order": {
        +                  "description": "Dashboard display order.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "payWhatYouWant": {
        +                  "description": "Whether pay-what-you-want pricing is enabled.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "paymentPlan": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "planIterations": {
        +                          "description": "Number of billing cycles after which the plan completes.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +                },
        +                "pwywSuggestedPrice": {
        +                  "description": "Suggested price in cents for PWYW prices.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "recurring": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "billingCycleAnchorConfig": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "dayOfMonth": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 31,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ],
        +                                  "description": "Day of month the billing cycle is anchored to."
        +                                },
        +                                "enabled": {
        +                                  "type": [
        +                                    "boolean",
        +                                    "null"
        +                                  ]
        +                                },
        +                                "month": {
        +                                  "anyOf": [
        +                                    {
        +                                      "maximum": 12,
        +                                      "minimum": 1,
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "null"
        +                                    }
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "interval": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "day",
        +                                "week",
        +                                "month",
        +                                "year"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Billing interval (day, week, month, year).",
        +                          "example": "month"
        +                        },
        +                        "intervalCount": {
        +                          "description": "Number of intervals between billings.",
        +                          "example": 1,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "startDate": {
        +                          "anyOf": [
        +                            {
        +                              "format": "date-time",
        +                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The date on which the subscription begins."
        +                        },
        +                        "trialPeriodDays": {
        +                          "description": "Trial period in days.",
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Recurring billing configuration. Never present together with paymentPlan."
        +                },
        +                "reference": {
        +                  "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "setupFee": {
        +                  "description": "One-time setup fee in cents.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "setupFeeMultipliesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "amount",
        +                "currency",
        +                "id",
        +                "enabled",
        +                "isDefault",
        +                "billingType"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Explicit price list for this product. Populated when the product was created with `prices[]`. Each entry includes an `isDefault` flag. Use `defaultPriceId` to find the pre-selected price. Disabled prices are filtered from customer-facing reads but appear in seller API responses."
        +      },
        +      "role": {
        +        "anyOf": [
        +          {
        +            "description": "What the product is for. `orderbump` products are the simplified add-ons a checkout page offers as order bumps and an event page offers as add-ons; they can never be sold as a page product, and a product cannot be converted between roles.",
        +            "enum": [
        +              "product",
        +              "orderbump"
        +            ],
        +            "example": "product",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "shortDescription": {
        +        "description": "Plain-text one-liner, shown where the full description is too long.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sku": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "stock": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "example": "exclusive",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "taxCode": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Product title.",
        +        "example": "Premium Course",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Product type.",
        +        "enum": [
        +          "charge",
        +          "subscription"
        +        ],
        +        "example": "charge",
        +        "type": "string"
        +      },
        +      "updatedAt": {
        +        "description": "ISO 8601 timestamp when the product was last updated.",
        +        "type": "string"
        +      },
        +      "variants": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "hidden": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "id": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "increasesWithQuantity": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "layout": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "collapseVariantOptions": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "imageSize": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "small",
        +                                "medium",
        +                                "large",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "showPwywPlaceholder": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantName": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionNames": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPriceSign": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPrices": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "spacing": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "comfortable",
        +                                "compact",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "textAlign": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "left",
        +                                "center",
        +                                "stack",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "variantOptionColumns": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        },
        +                        "variantOptionLayout": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "list",
        +                                "grid"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "manageVariantOptionStock": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "options": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "additionalChargeAmount": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "description": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "fileIds": {
        +                            "anyOf": [
        +                              {
        +                                "items": {
        +                                  "pattern": "^[0-9a-fA-F]{24}$",
        +                                  "type": "string"
        +                                },
        +                                "type": "array"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "id": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "image": {
        +                            "anyOf": [
        +                              {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "fileId": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "height": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "name": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "size": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "url": {
        +                                    "type": [
        +                                      "string",
        +                                      "null"
        +                                    ]
        +                                  },
        +                                  "width": {
        +                                    "type": [
        +                                      "number",
        +                                      "null"
        +                                    ]
        +                                  }
        +                                },
        +                                "type": "object"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "name": {
        +                            "type": "string"
        +                          },
        +                          "payWhatYouWant": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "pwywSuggestedPrice": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "sku": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "status": {
        +                            "anyOf": [
        +                              {
        +                                "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                                "enum": [
        +                                  "enabled",
        +                                  "disabled",
        +                                  "deleted"
        +                                ],
        +                                "example": "enabled",
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "stock": {
        +                            "type": [
        +                              "number",
        +                              "null"
        +                            ]
        +                          },
        +                          "type": {
        +                            "anyOf": [
        +                              {
        +                                "enum": [
        +                                  "one_time",
        +                                  "recurring",
        +                                  "pay_what_you_want"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "required": [
        +                          "name"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "order": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "preselect": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "optionId": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "quantity": {
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "priceIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Price IDs this variant group is scoped to. Present only when the product has multiple prices. Customers see this variant group only when the corresponding price is selected."
        +                },
        +                "reference": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "required": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "selectionType": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +                      "enum": [
        +                        "single",
        +                        "multiple",
        +                        "quantity"
        +                      ],
        +                      "example": "single",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "showHideLogic": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "comparison": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "is",
        +                                "is_not",
        +                                "is_empty",
        +                                "is_not_empty",
        +                                "contains"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "element": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "elementId": {
        +                                  "type": [
        +                                    "string",
        +                                    "null"
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "value": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "status": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                      "enum": [
        +                        "enabled",
        +                        "disabled",
        +                        "deleted"
        +                      ],
        +                      "example": "enabled",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "useVariantOptionSkus": {
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "name"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product variants."
        +      },
        +      "variantsRequired": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "type",
        +      "title",
        +      "price",
        +      "createdAt",
        +      "updatedAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_event1 field changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedupdate_field2 fields changed
      • changedInput schema / properties / reference / description
        Previous value: -"External reference ID for integration purposes. Generated from the field type or label when omitted."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Generated from the field type or label when omitted, and not updated when the label changes. Changing it breaks integrations that match on the old key, so only send it when the seller asks."
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedupdate_form1 field changed
      • changedOutput schema / $defs / Field / properties / reference / description
        Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
    • Changedupdate_product6 fields changed
      • changedInput schema / properties / price / properties / reference / description
        Previous value: -"Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference."New value: +"Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong."
      • changedInput schema / properties / price / properties / reference / example
        Previous value: -"price_one_time_fixed_5000"New value: +"complete-bundle"
      • changedInput schema / properties / prices / items / properties / reference / description
        Previous value: -"Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference."New value: +"Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. Each sale keeps the reference it was bought with, so changing it gives the same price two names in the seller's data. Generated when omitted, and a price resent by id keeps its stored reference. Only send it when the seller asks to set or change the reference: never to match a new amount or name. Don't put an amount in it, since a coupon or a later price change makes the number wrong."
      • changedInput schema / properties / prices / items / properties / reference / example
        Previous value: -"price_one_time_fixed_5000"New value: +"complete-bundle"
      • changedInput schema / properties / variants / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "hidden": {
        -          "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "Existing variant id. Include it to keep (and edit) an existing variant; omit it to create a new one.",
        -          "pattern": "^[0-9a-fA-F]{24}$",
        -          "type": "string"
        -        },
        -        "increasesWithQuantity": {
        -          "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "key": {
        -          "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
        -          "example": "select-package-tier",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "layout": {
        -          "anyOf": [
        -            {
        -              "properties": {
        -                "collapseVariantOptions": {
        -                  "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
        -                  "example": false,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "imageSize": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "small",
        -                        "medium",
        -                        "large",
        -                        ""
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Size of variant option images. Defaults to `small`.",
        -                  "example": "small"
        -                },
        -                "showPwywPlaceholder": {
        -                  "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "showVariantName": {
        -                  "description": "Show the variant name. Defaults to `true`.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "showVariantOptionNames": {
        -                  "description": "Show variant option names. Defaults to `true`.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "showVariantOptionPriceSign": {
        -                  "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "showVariantOptionPrices": {
        -                  "description": "Show variant option prices. Defaults to `true`.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "spacing": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "comfortable",
        -                        "compact",
        -                        ""
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Spacing between variant options. Defaults to `comfortable`.",
        -                  "example": "comfortable"
        -                },
        -                "textAlign": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "left",
        -                        "center",
        -                        "stack",
        -                        ""
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Text alignment for variant options. Defaults to `left`.",
        -                  "example": "left"
        -                },
        -                "variantOptionColumns": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 10,
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Number of columns for grid layout. Defaults to `2`.",
        -                  "example": 2
        -                },
        -                "variantOptionLayout": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "list",
        -                        "grid"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Layout style for variant options. Defaults to `list`.",
        -                  "example": "list"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Layout configuration for this variant."
        -        },
        -        "manageVariantOptionStock": {
        -          "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "description": "Name of the variant.",
        -          "example": "Plan Type",
        -          "type": "string"
        -        },
        -        "options": {
        -          "description": "Options for this variant. At least one is required.",
        -          "items": {
        -            "properties": {
        -              "additionalChargeAmount": {
        -                "description": "The additional charge for selecting this variant option in cents.",
        -                "example": 1000,
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "description": {
        -                "description": "Description of the variant option. Supports HTML or plain text.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "discountedFromPrice": {
        -                "anyOf": [
        -                  {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The original price of this variant option in cents.",
        -                "example": 1500
        -              },
        -              "fileIds": {
        -                "anyOf": [
        -                  {
        -                    "items": {
        -                      "pattern": "^[0-9a-fA-F]{24}$",
        -                      "type": "string"
        -                    },
        -                    "type": "array"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Files specific to this variant option. Available to the customer after purchase."
        -              },
        -              "id": {
        -                "description": "Existing option id. Include it to keep (and edit) an existing option; omit it to create a new one.",
        -                "pattern": "^[0-9a-fA-F]{24}$",
        -                "type": "string"
        -              },
        -              "imageId": {
        -                "anyOf": [
        -                  {
        -                    "pattern": "^[0-9a-fA-F]{24}$",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "key": {
        -                "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
        -                "example": "pro-option",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "name": {
        -                "description": "Name of the variant option.",
        -                "example": "Basic",
        -                "type": "string"
        -              },
        -              "payWhatYouWant": {
        -                "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
        -                "example": false,
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "pwywSuggestedPrice": {
        -                "anyOf": [
        -                  {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
        -                "example": 2500
        -              },
        -              "sku": {
        -                "description": "SKU for this option.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "status": {
        -                "anyOf": [
        -                  {
        -                    "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                    "enum": [
        -                      "enabled",
        -                      "disabled",
        -                      "deleted"
        -                    ],
        -                    "example": "enabled",
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Status of the variant option. Defaults to `enabled`.",
        -                "example": "enabled"
        -              },
        -              "stock": {
        -                "description": "Stock quantity for this option.",
        -                "example": 10,
        -                "type": [
        -                  "number",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "anyOf": [
        -                  {
        -                    "enum": [
        -                      "one_time",
        -                      "recurring"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
        -                "example": "one_time"
        -              }
        -            },
        -            "required": [
        -              "name"
        -            ],
        -            "type": "object"
        -          },
        -          "minItems": 1,
        -          "type": "array"
        -        },
        -        "order": {
        -          "description": "Display order of the variant. Defaults to `0`.",
        -          "example": 0,
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "preselect": {
        -          "anyOf": [
        -            {
        -              "properties": {
        -                "enabled": {
        -                  "description": "Enable preselecting a variant option. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "optionId": {
        -                  "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
        -                  "example": "pro-option",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "quantity": {
        -                  "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
        -                  "example": 2,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Preselect configuration for this variant.",
        -          "example": {
        -            "enabled": true,
        -            "optionId": "pro-option",
        -            "quantity": 1
        -          }
        -        },
        -        "priceIds": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "pattern": "^[0-9a-fA-F]{24}$",
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
        -          "example": [
        -            "507f1f77bcf86cd799439011"
        -          ]
        -        },
        -        "reference": {
        -          "anyOf": [
        -            {
        -              "maxLength": 36,
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "External reference ID. Generated from the variant name when omitted.",
        -          "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
        -        },
        -        "required": {
        -          "description": "Whether the customer must select at least one option in the variant.",
        -          "example": true,
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "selectionType": {
        -          "anyOf": [
        -            {
        -              "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -              "enum": [
        -                "single",
        -                "multiple",
        -                "quantity"
        -              ],
        -              "example": "single",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
        -          "example": "single"
        -        },
        -        "showHideLogic": {
        -          "anyOf": [
        -            {
        -              "properties": {
        -                "comparison": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "is",
        -                        "is_not",
        -                        "is_empty",
        -                        "is_not_empty",
        -                        "contains"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
        -                  "example": "is"
        -                },
        -                "element": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "elementId": {
        -                          "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
        -                          "example": "select-package-tier",
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Element (variant) to compare against."
        -                },
        -                "enabled": {
        -                  "description": "Enable conditional show/hide logic. Defaults to `false`.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "value": {
        -                  "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
        -                  "example": "pro-option",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Conditional logic to show or hide this variant based on other form elements."
        -        },
        -        "status": {
        -          "anyOf": [
        -            {
        -              "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -              "enum": [
        -                "enabled",
        -                "disabled",
        -                "deleted"
        -              ],
        -              "example": "enabled",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Status of the variant. Defaults to `enabled`",
        -          "example": "enabled"
        -        },
        -        "useVariantOptionSkus": {
        -          "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "options"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "properties": {
        +        "hidden": {
        +          "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Existing variant id. Include it to keep (and edit) an existing variant; omit it to create a new one.",
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "increasesWithQuantity": {
        +          "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "key": {
        +          "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
        +          "example": "select-package-tier",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "layout": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "collapseVariantOptions": {
        +                  "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
        +                  "example": false,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "imageSize": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "small",
        +                        "medium",
        +                        "large",
        +                        ""
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Size of variant option images. Defaults to `small`.",
        +                  "example": "small"
        +                },
        +                "showPwywPlaceholder": {
        +                  "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "showVariantName": {
        +                  "description": "Show the variant name. Defaults to `true`.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "showVariantOptionNames": {
        +                  "description": "Show variant option names. Defaults to `true`.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "showVariantOptionPriceSign": {
        +                  "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "showVariantOptionPrices": {
        +                  "description": "Show variant option prices. Defaults to `true`.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "spacing": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "comfortable",
        +                        "compact",
        +                        ""
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Spacing between variant options. Defaults to `comfortable`.",
        +                  "example": "comfortable"
        +                },
        +                "textAlign": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "left",
        +                        "center",
        +                        "stack",
        +                        ""
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Text alignment for variant options. Defaults to `left`.",
        +                  "example": "left"
        +                },
        +                "variantOptionColumns": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 10,
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Number of columns for grid layout. Defaults to `2`.",
        +                  "example": 2
        +                },
        +                "variantOptionLayout": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "list",
        +                        "grid"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Layout style for variant options. Defaults to `list`.",
        +                  "example": "list"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Layout configuration for this variant."
        +        },
        +        "manageVariantOptionStock": {
        +          "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Name of the variant.",
        +          "example": "Plan Type",
        +          "type": "string"
        +        },
        +        "options": {
        +          "description": "Options for this variant. At least one is required.",
        +          "items": {
        +            "properties": {
        +              "additionalChargeAmount": {
        +                "description": "The additional charge for selecting this variant option in cents.",
        +                "example": 1000,
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "description": {
        +                "description": "Description of the variant option. Supports HTML or plain text.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "discountedFromPrice": {
        +                "anyOf": [
        +                  {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The original price of this variant option in cents.",
        +                "example": 1500
        +              },
        +              "fileIds": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "pattern": "^[0-9a-fA-F]{24}$",
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Files specific to this variant option. Available to the customer after purchase."
        +              },
        +              "id": {
        +                "description": "Existing option id. Include it to keep (and edit) an existing option; omit it to create a new one.",
        +                "pattern": "^[0-9a-fA-F]{24}$",
        +                "type": "string"
        +              },
        +              "imageId": {
        +                "anyOf": [
        +                  {
        +                    "pattern": "^[0-9a-fA-F]{24}$",
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "key": {
        +                "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
        +                "example": "pro-option",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "description": "Name of the variant option.",
        +                "example": "Basic",
        +                "type": "string"
        +              },
        +              "payWhatYouWant": {
        +                "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
        +                "example": false,
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "pwywSuggestedPrice": {
        +                "anyOf": [
        +                  {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
        +                "example": 2500
        +              },
        +              "sku": {
        +                "description": "SKU for this option.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "status": {
        +                "anyOf": [
        +                  {
        +                    "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                    "enum": [
        +                      "enabled",
        +                      "disabled",
        +                      "deleted"
        +                    ],
        +                    "example": "enabled",
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Status of the variant option. Defaults to `enabled`.",
        +                "example": "enabled"
        +              },
        +              "stock": {
        +                "description": "Stock quantity for this option.",
        +                "example": 10,
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "type": {
        +                "anyOf": [
        +                  {
        +                    "enum": [
        +                      "one_time",
        +                      "recurring"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
        +                "example": "one_time"
        +              }
        +            },
        +            "required": [
        +              "name"
        +            ],
        +            "type": "object"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        },
        +        "order": {
        +          "description": "Display order of the variant. Defaults to `0`.",
        +          "example": 0,
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "preselect": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "enabled": {
        +                  "description": "Enable preselecting a variant option. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "optionId": {
        +                  "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
        +                  "example": "pro-option",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "quantity": {
        +                  "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
        +                  "example": 2,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Preselect configuration for this variant.",
        +          "example": {
        +            "enabled": true,
        +            "optionId": "pro-option",
        +            "quantity": 1
        +          }
        +        },
        +        "priceIds": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "pattern": "^[0-9a-fA-F]{24}$",
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
        +          "example": [
        +            "507f1f77bcf86cd799439011"
        +          ]
        +        },
        +        "reference": {
        +          "anyOf": [
        +            {
        +              "maxLength": 36,
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Stable ID that exports and integrations use for this variant. Generated from the variant name when omitted, and not updated when the name changes. Changing it breaks integrations that match on the old one, so only send it when the seller asks.",
        +          "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
        +        },
        +        "required": {
        +          "description": "Whether the customer must select at least one option in the variant.",
        +          "example": true,
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "selectionType": {
        +          "anyOf": [
        +            {
        +              "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +              "enum": [
        +                "single",
        +                "multiple",
        +                "quantity"
        +              ],
        +              "example": "single",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
        +          "example": "single"
        +        },
        +        "showHideLogic": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "comparison": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "is",
        +                        "is_not",
        +                        "is_empty",
        +                        "is_not_empty",
        +                        "contains"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
        +                  "example": "is"
        +                },
        +                "element": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "elementId": {
        +                          "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
        +                          "example": "select-package-tier",
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Element (variant) to compare against."
        +                },
        +                "enabled": {
        +                  "description": "Enable conditional show/hide logic. Defaults to `false`.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "value": {
        +                  "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
        +                  "example": "pro-option",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Conditional logic to show or hide this variant based on other form elements."
        +        },
        +        "status": {
        +          "anyOf": [
        +            {
        +              "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +              "enum": [
        +                "enabled",
        +                "disabled",
        +                "deleted"
        +              ],
        +              "example": "enabled",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Status of the variant. Defaults to `enabled`",
        +          "example": "enabled"
        +        },
        +        "useVariantOptionSkus": {
        +          "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "options"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / data / properties / prices / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "description": "A single price entry on a multi-price product.",
        -      "properties": {
        -        "amount": {
        -          "description": "Price in smallest currency unit (cents).",
        -          "example": 4900,
        -          "type": "number"
        -        },
        -        "badge": {
        -          "description": "Optional short label shown over the price card.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "badgeIcon": {
        -          "anyOf": [
        -            {
        -              "description": "Icon shown before the badge text.",
        -              "enum": [
        -                "star",
        -                "sparkles",
        -                "fire",
        -                "bolt",
        -                "rocket",
        -                "trophy",
        -                "check",
        -                "x-mark",
        -                "plus",
        -                "arrow-right",
        -                "check-badge",
        -                "check-circle",
        -                "shield-check",
        -                "thumbs-up",
        -                "heart",
        -                "smile",
        -                "light-bulb",
        -                "sun",
        -                "moon",
        -                "gift",
        -                "tag",
        -                "percent",
        -                "dollar",
        -                "banknotes",
        -                "credit-card",
        -                "shopping-bag",
        -                "shopping-cart",
        -                "truck",
        -                "clock",
        -                "calendar",
        -                "bell",
        -                "megaphone",
        -                "trending-up",
        -                "chart",
        -                "refresh",
        -                "lock",
        -                "key",
        -                "ticket",
        -                "users",
        -                "academic-cap",
        -                "book",
        -                "music",
        -                "video",
        -                "document",
        -                "download",
        -                "mobile",
        -                "camera",
        -                "paint-brush",
        -                "puzzle",
        -                "cube",
        -                "globe",
        -                "map-pin",
        -                "storefront",
        -                "tools",
        -                "beaker",
        -                "lifebuoy",
        -                "chat",
        -                "envelope",
        -                "phone",
        -                "cake",
        -                "scale",
        -                "eye"
        -              ],
        -              "example": "star",
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Optional icon shown before the badge text."
        -        },
        -        "billingType": {
        -          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        -          "enum": [
        -            "one_time",
        -            "recurring"
        -          ],
        -          "example": "one_time",
        -          "type": "string"
        -        },
        -        "currency": {
        -          "description": "Lowercase ISO 4217 currency code.",
        -          "example": "usd",
        -          "type": "string"
        -        },
        -        "discountedFromPrice": {
        -          "description": "Original price before discount, in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "enabled": {
        -          "description": "Whether this price is selectable by customers.",
        -          "type": "boolean"
        -        },
        -        "hidden": {
        -          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "Unique price identifier.",
        -          "example": "507f1f77bcf86cd799439011",
        -          "type": "string"
        -        },
        -        "isDefault": {
        -          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        -          "type": "boolean"
        -        },
        -        "label": {
        -          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order": {
        -          "description": "Dashboard display order.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "payWhatYouWant": {
        -          "description": "Whether pay-what-you-want pricing is enabled.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "paymentPlan": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "planIterations": {
        -                  "description": "Number of billing cycles after which the plan completes.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        -        },
        -        "pwywSuggestedPrice": {
        -          "description": "Suggested price in cents for PWYW prices.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "recurring": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "billingCycleAnchorConfig": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "dayOfMonth": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 31,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Day of month the billing cycle is anchored to."
        -                        },
        -                        "enabled": {
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "month": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 12,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ]
        -                },
        -                "interval": {
        -                  "anyOf": [
        -                    {
        -                      "enum": [
        -                        "day",
        -                        "week",
        -                        "month",
        -                        "year"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Billing interval (day, week, month, year).",
        -                  "example": "month"
        -                },
        -                "intervalCount": {
        -                  "description": "Number of intervals between billings.",
        -                  "example": 1,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "startDate": {
        -                  "anyOf": [
        -                    {
        -                      "format": "date-time",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "The date on which the subscription begins."
        -                },
        -                "trialPeriodDays": {
        -                  "description": "Trial period in days.",
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Recurring billing configuration. Never present together with paymentPlan."
        -        },
        -        "reference": {
        -          "description": "Merchant-facing internal id used in exports and reports (e.g. `price_one_time_fixed_5000`).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "setupFee": {
        -          "description": "One-time setup fee in cents.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "setupFeeMultipliesWithQuantity": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "amount",
        -        "currency",
        -        "id",
        -        "enabled",
        -        "isDefault",
        -        "billingType"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "A single price entry on a multi-price product.",
        +      "properties": {
        +        "amount": {
        +          "description": "Price in smallest currency unit (cents).",
        +          "example": 4900,
        +          "type": "number"
        +        },
        +        "badge": {
        +          "description": "Optional short label shown over the price card.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "badgeIcon": {
        +          "anyOf": [
        +            {
        +              "description": "Icon shown before the badge text.",
        +              "enum": [
        +                "star",
        +                "sparkles",
        +                "fire",
        +                "bolt",
        +                "rocket",
        +                "trophy",
        +                "check",
        +                "x-mark",
        +                "plus",
        +                "arrow-right",
        +                "check-badge",
        +                "check-circle",
        +                "shield-check",
        +                "thumbs-up",
        +                "heart",
        +                "smile",
        +                "light-bulb",
        +                "sun",
        +                "moon",
        +                "gift",
        +                "tag",
        +                "percent",
        +                "dollar",
        +                "banknotes",
        +                "credit-card",
        +                "shopping-bag",
        +                "shopping-cart",
        +                "truck",
        +                "clock",
        +                "calendar",
        +                "bell",
        +                "megaphone",
        +                "trending-up",
        +                "chart",
        +                "refresh",
        +                "lock",
        +                "key",
        +                "ticket",
        +                "users",
        +                "academic-cap",
        +                "book",
        +                "music",
        +                "video",
        +                "document",
        +                "download",
        +                "mobile",
        +                "camera",
        +                "paint-brush",
        +                "puzzle",
        +                "cube",
        +                "globe",
        +                "map-pin",
        +                "storefront",
        +                "tools",
        +                "beaker",
        +                "lifebuoy",
        +                "chat",
        +                "envelope",
        +                "phone",
        +                "cake",
        +                "scale",
        +                "eye"
        +              ],
        +              "example": "star",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Optional icon shown before the badge text."
        +        },
        +        "billingType": {
        +          "description": "Billing type. Immutable once the price exists (see the pricing-type identity lock).",
        +          "enum": [
        +            "one_time",
        +            "recurring"
        +          ],
        +          "example": "one_time",
        +          "type": "string"
        +        },
        +        "currency": {
        +          "description": "Lowercase ISO 4217 currency code.",
        +          "example": "usd",
        +          "type": "string"
        +        },
        +        "discountedFromPrice": {
        +          "description": "Original price before discount, in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "enabled": {
        +          "description": "Whether this price is selectable by customers.",
        +          "type": "boolean"
        +        },
        +        "hidden": {
        +          "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Unique price identifier.",
        +          "example": "507f1f77bcf86cd799439011",
        +          "type": "string"
        +        },
        +        "isDefault": {
        +          "description": "Whether checkout pre-selects this price: the entry `defaultPriceId` names. False on every price when the product has several prices and no default.",
        +          "type": "boolean"
        +        },
        +        "label": {
        +          "description": "Optional seller-facing label (e.g. \"Monthly\", \"Annual\").",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "order": {
        +          "description": "Dashboard display order.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "payWhatYouWant": {
        +          "description": "Whether pay-what-you-want pricing is enabled.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "paymentPlan": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "planIterations": {
        +                  "description": "Number of billing cycles after which the plan completes.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Payment plan configuration — recurring billing that completes after `planIterations` cycles. Never present together with recurring."
        +        },
        +        "pwywSuggestedPrice": {
        +          "description": "Suggested price in cents for PWYW prices.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "recurring": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "billingCycleAnchorConfig": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "dayOfMonth": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 31,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Day of month the billing cycle is anchored to."
        +                        },
        +                        "enabled": {
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "month": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 12,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "interval": {
        +                  "anyOf": [
        +                    {
        +                      "enum": [
        +                        "day",
        +                        "week",
        +                        "month",
        +                        "year"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Billing interval (day, week, month, year).",
        +                  "example": "month"
        +                },
        +                "intervalCount": {
        +                  "description": "Number of intervals between billings.",
        +                  "example": 1,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "startDate": {
        +                  "anyOf": [
        +                    {
        +                      "format": "date-time",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "The date on which the subscription begins."
        +                },
        +                "trialPeriodDays": {
        +                  "description": "Trial period in days.",
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Recurring billing configuration. Never present together with paymentPlan."
        +        },
        +        "reference": {
        +          "description": "Stable label for this price, sent to exports, Zapier, Google Sheets and webhooks as `priceReference`. A generated reference can contain the amount the price was created with, such as `price_one_time_fixed_5000`. It is not updated when the amount changes, and does not need to be.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "setupFee": {
        +          "description": "One-time setup fee in cents.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "setupFeeMultipliesWithQuantity": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "id",
        +        "enabled",
        +        "isDefault",
        +        "billingType"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  15. 3 tool updates
    • Addedarchive_ticket_group
    • Addedcreate_ticket_group
    • Addedupdate_ticket_group
  16. 14 tool updates
    • Changedcreate_checkout_page16 fields changed
      • changedInput schema / $defs / FieldInput / properties / order / description
        Previous value: -"Display order of this field. When omitted, order is determined by the position of the field in the array."New value: +"Position of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedInput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutFieldInput
        Added value: +{
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldKey": {
        +      "description": "The `key` you gave the field in `fields` in this request. A key that matches no field is rejected.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldKey"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutGroupInput
        Added value: +{
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutFieldInput"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutItemInput
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutFieldInput"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroupInput"
        +    }
        +  ]
        +}
      • addedInput schema / properties / formLayout
        Added value: +{
        +  "description": "How to arrange the page's form, top to bottom. Reference a field by `fieldKey`: the `key` you gave it in `fields` in this request. Each item is one of: `field` (`fieldKey`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItemInput"
        +  },
        +  "maxItems": 500,
        +  "type": "array"
        +}
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedcreate_event16 fields changed
      • changedInput schema / $defs / FieldInput / properties / order / description
        Previous value: -"Display order of this field. When omitted, order is determined by the position of the field in the array."New value: +"Position of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedInput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutFieldInput
        Added value: +{
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldKey": {
        +      "description": "The `key` you gave the field in `fields` in this request. A key that matches no field is rejected.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldKey"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutGroupInput
        Added value: +{
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutFieldInput"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutItemInput
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutFieldInput"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroupInput"
        +    }
        +  ]
        +}
      • addedInput schema / properties / formLayout
        Added value: +{
        +  "description": "How to arrange the page's form, top to bottom. Reference a field by `fieldKey`: the `key` you gave it in `fields` in this request. Each item is one of: `field` (`fieldKey`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItemInput"
        +  },
        +  "maxItems": 500,
        +  "type": "array"
        +}
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedcreate_field2 fields changed
      • changedInput schema / properties / order / description
        Previous value: -"Display order of this field. When omitted, order is determined by the position of the field in the array."New value: +"Position of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
    • Changedcreate_form16 fields changed
      • changedInput schema / $defs / FieldInput / properties / order / description
        Previous value: -"Display order of this field. When omitted, order is determined by the position of the field in the array."New value: +"Position of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedInput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutFieldInput
        Added value: +{
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldKey": {
        +      "description": "The `key` you gave the field in `fields` in this request. A key that matches no field is rejected.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldKey"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutGroupInput
        Added value: +{
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutFieldInput"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutItemInput
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutFieldInput"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroupInput"
        +    }
        +  ]
        +}
      • addedInput schema / properties / formLayout
        Added value: +{
        +  "description": "How to arrange the page's form, top to bottom. Reference a field by `fieldKey`: the `key` you gave it in `fields` in this request. Each item is one of: `field` (`fieldKey`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItemInput"
        +  },
        +  "maxItems": 500,
        +  "type": "array"
        +}
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedget_checkout_page8 fields changed
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedget_event8 fields changed
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedget_form8 fields changed
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedlist_checkout_pages8 fields changed
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedlist_events8 fields changed
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedlist_forms8 fields changed
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / items / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_checkout_page15 fields changed
      • addedInput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutField
        Added value: +{
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedInput schema / properties / formLayout
        Added value: +{
        +  "description": "Replaces how the page's form is arranged, top to bottom. Reference fields by `fieldId`, the ids in the page's `fields`; an id that is not on the page is rejected. Send the whole layout: read the current one from `formLayout` on the page, change it and send it back. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "maxItems": 500,
        +  "type": "array"
        +}
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_event15 fields changed
      • addedInput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutField
        Added value: +{
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedInput schema / properties / formLayout
        Added value: +{
        +  "description": "Replaces how the page's form is arranged, top to bottom. Reference fields by `fieldId`, the ids in the page's `fields`; an id that is not on the page is rejected. Send the whole layout: read the current one from `formLayout` on the page, change it and send it back. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "maxItems": 500,
        +  "type": "array"
        +}
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_field2 fields changed
      • changedInput schema / properties / order / description
        Previous value: -"Display order of this field. When omitted, order is determined by the position of the field in the array."New value: +"Position of this field among the page's fields, from 0. When omitted, a new field goes after the current ones, or follows its position in `fields` when a page is created. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
    • Changedupdate_form15 fields changed
      • addedInput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutField
        Added value: +{
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedInput schema / properties / formLayout
        Added value: +{
        +  "description": "Replaces how the page's form is arranged, top to bottom. Reference fields by `fieldId`, the ids in the page's `fields`; an id that is not on the page is rejected. Send the whole layout: read the current one from `formLayout` on the page, change it and send it back. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. Fields the layout leaves out are added after it, in their current order. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. A `discount-code` item only places the discount code box: the box shows while `showCouponCodeField` is on, and the item does not switch it on. Forms have no discount code, so a form layout must leave it out. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "maxItems": 500,
        +  "type": "array"
        +}
      • changedOutput schema / $defs / Field / properties / order / description
        Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
      • addedOutput schema / $defs / FormLayoutDiscountCode
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
        +  "properties": {
        +    "type": {
        +      "const": "discount-code",
        +      "description": "Always `discount-code`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutDivider
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A line that separates parts of the form.",
        +  "properties": {
        +    "id": {
        +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "divider",
        +      "description": "Always `divider`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutField
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A field on the page, shown where it sits in the layout.",
        +  "properties": {
        +    "fieldId": {
        +      "description": "The `id` of a field in the page's `fields`.",
        +      "pattern": "^[0-9a-fA-F]{24}$",
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "field",
        +      "description": "Always `field`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "fieldId"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutGroup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Items shown side by side in columns.",
        +  "properties": {
        +    "columns": {
        +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
        +      "maximum": 4,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "id": {
        +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
        +      "items": {
        +        "oneOf": [
        +          {
        +            "$ref": "#/$defs/FormLayoutField"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutHeading"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDivider"
        +          },
        +          {
        +            "$ref": "#/$defs/FormLayoutDiscountCode"
        +          }
        +        ]
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    },
        +    "name": {
        +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
        +      "maxLength": 100,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "group",
        +      "description": "Always `group`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "columns",
        +    "items"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutHeading
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "A heading or subheading shown above the items after it.",
        +  "properties": {
        +    "id": {
        +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "level": {
        +      "description": "`heading` for a section title, `subheading` for a smaller one.",
        +      "enum": [
        +        "heading",
        +        "subheading"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "The text shown, up to 200 characters.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "type": {
        +      "const": "heading",
        +      "description": "Always `heading`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type",
        +    "id",
        +    "text",
        +    "level"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / $defs / FormLayoutItem
        Added value: +{
        +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "oneOf": [
        +    {
        +      "$ref": "#/$defs/FormLayoutField"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutHeading"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDivider"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutDiscountCode"
        +    },
        +    {
        +      "$ref": "#/$defs/FormLayoutGroup"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / data / properties / formLayout
        Added value: +{
        +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
        +  "items": {
        +    "$ref": "#/$defs/FormLayoutItem"
        +  },
        +  "type": "array"
        +}
  17. 1 tool update
    • Changedcreate_coupon1 field changed
      • changedInput schema / properties / amountOff / description
        Previous value: -"A positive integer representing the amount to subtract from an invoice total (required if `percentOff` is not passed)."New value: +"A positive integer representing the amount to subtract from an invoice total, in the smallest currency unit of `currency` (for example `500` USD is $5.00 and `500` JPY is ¥500). Required if `percentOff` is not passed."
  18. 3 tool updates
    • Changedcreate_checkout_page1 field changed
      • changedInput schema / properties / productData / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "defaultPriceId": {
        -        "description": "ID of the price pre-selected at checkout. Must reference an existing price `id` in `prices[]`. When omitted and there are several prices, checkout opens with none selected so the buyer chooses one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "description": "Description of the product. Accepts HTML or plain text.",
        -        "example": "Join our premium course today learn more at <a href=\"https://checkoutpage.com\">Checkout Page</a>.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "discounts": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "amountOff": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Fixed amount discount in cents. Cannot be used with `percentOff`.",
        -                  "example": 500
        -                },
        -                "maxQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Maximum quantity for this discount tier. Leave empty for no upper limit.",
        -                  "example": 10
        -                },
        -                "minQuantity": {
        -                  "anyOf": [
        -                    {
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Minimum quantity required for this discount to apply.",
        -                  "example": 5
        -                },
        -                "percentOff": {
        -                  "anyOf": [
        -                    {
        -                      "maximum": 100,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Percentage discount to apply. Cannot be used with `amountOff`.",
        -                  "example": 10
        -                },
        -                "quantityCondition": {
        -                  "description": "How this bulk discount is triggered. Use `checkout_quantity` to apply the discount based on the total checkout quantity. Use `variant_option_quantity` only when this same request also includes `variants` and matching option `key` values referenced by `variantOptionIds`. Defaults to `checkout_quantity`.",
        -                  "enum": [
        -                    "checkout_quantity",
        -                    "variant_option_quantity"
        -                  ],
        -                  "example": "checkout_quantity",
        -                  "type": "string"
        -                },
        -                "variantOptionIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "properties": {
        -                          "key": {
        -                            "type": "string"
        -                          }
        -                        },
        -                        "required": [
        -                          "key"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Variant option keys that this discount applies to. Only use this when `quantityCondition` is `variant_option_quantity`. Each entry must exactly match a temporary `key` from `variants[].options[].key` in the same request. These keys are caller-defined handles that are resolved to MongoDB ObjectIds at save time and do not appear in the response."
        -                }
        -              },
        -              "required": [
        -                "quantityCondition"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Bulk discounts for the product.\n\nUse `checkout_quantity` when the discount should apply to the total checkout quantity.\n\nUse `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:\n1. Include `productData.variants`.\n2. Give each target variant option a temporary `key` in `variants[].options[].key`.\n3. Reference those exact keys in `discounts[].variantOptionIds[].key`.\n\n- `variants[].options`: [{ name: \"Red\", key: \"red\" }, { name: \"Blue\", key: \"blue\" }]\n- `discounts`: [{ quantityCondition: \"variant_option_quantity\", variantOptionIds: [{ key: \"red\" }, { key: \"blue\" }], minQuantity: 3, percentOff: 10 }]\n\n[Learn more](https://checkoutpage.com/docs/articles/bulk-discounts)",
        -        "example": [
        -          {
        -            "minQuantity": 3,
        -            "percentOff": 10,
        -            "quantityCondition": "variant_option_quantity",
        -            "variantOptionIds": [
        -              {
        -                "key": "red"
        -              },
        -              {
        -                "key": "blue"
        -              }
        -            ]
        -          }
        -        ]
        -      },
        -      "enableFileAccessForInactiveSubscriptions": {
        -        "description": "Allow customers with inactive subscriptions to keep accessing file downloads.",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "fileIds": {
        -        "description": "Files for the product. Available to the customer after purchase.",
        -        "example": [
        -          "507f1f77bcf86cd799439011"
        -        ],
        -        "items": {
        -          "pattern": "^[0-9a-fA-F]{24}$",
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "fixedTaxRateIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "maxItems": 1,
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "List of Tax Rate IDs applied to this product. When the page's `tax.mode` is `fixed` and this is omitted on create, the seller default rate is applied. Call `list_tax_rates` first to find an existing rate; use `create_tax_rate` to add a new one."
        -      },
        -      "generateLicenseKeys": {
        -        "description": "If true, on purchase a license key for the product is generated",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "hasUnlimitedStock": {
        -        "description": "Whether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "imageIds": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "pattern": "^[0-9a-fA-F]{24}$",
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Images for the product. Provide a list of image file IDs. Use the `/files/upload` API to add images.",
        -        "example": [
        -          "507f1f77bcf86cd799439011"
        -        ]
        -      },
        -      "limitPayments": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "description": "Prevent a customer who has already paid for this product from paying again. One-time payments only. Defaults to `false`.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        -      },
        -      "limitSubscriptions": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "enabled": {
        -                "description": "Enable subscription limits. Defaults to `false`.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "limitSubscriptionsStripe": {
        -                "anyOf": [
        -                  {
        -                    "properties": {
        -                      "enabled": {
        -                        "description": "Enable Stripe-level subscription limits (checks active subscriptions in Stripe). Defaults to `false`.",
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      }
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Stripe-specific subscription limit configuration."
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Configuration to limit the number of active subscriptions for this product. Used to cap subscriptions to a specific number."
        -      },
        -      "price": {
        -        "description": "The singular way to set a product price — equivalent to `prices: [entry]` and materialized as one. When `prices` is also provided it takes precedence and `price` is ignored. On update, `price` is only valid while the product has at most one price (a legacy product transitions to `prices[]` on first use); products with multiple prices must be updated through `prices[]`.",
        -        "properties": {
        -          "amount": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Price in smallest currency unit (cents). Defaults to `0`.",
        -            "example": 4900
        -          },
        -          "badge": {
        -            "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "badgeIcon": {
        -            "anyOf": [
        -              {
        -                "description": "Icon shown before the badge text.",
        -                "enum": [
        -                  "star",
        -                  "sparkles",
        -                  "fire",
        -                  "bolt",
        -                  "rocket",
        -                  "trophy",
        -                  "check",
        -                  "x-mark",
        -                  "plus",
        -                  "arrow-right",
        -                  "check-badge",
        -                  "check-circle",
        -                  "shield-check",
        -                  "thumbs-up",
        -                  "heart",
        -                  "smile",
        -                  "light-bulb",
        -                  "sun",
        -                  "moon",
        -                  "gift",
        -                  "tag",
        -                  "percent",
        -                  "dollar",
        -                  "banknotes",
        -                  "credit-card",
        -                  "shopping-bag",
        -                  "shopping-cart",
        -                  "truck",
        -                  "clock",
        -                  "calendar",
        -                  "bell",
        -                  "megaphone",
        -                  "trending-up",
        -                  "chart",
        -                  "refresh",
        -                  "lock",
        -                  "key",
        -                  "ticket",
        -                  "users",
        -                  "academic-cap",
        -                  "book",
        -                  "music",
        -                  "video",
        -                  "document",
        -                  "download",
        -                  "mobile",
        -                  "camera",
        -                  "paint-brush",
        -                  "puzzle",
        -                  "cube",
        -                  "globe",
        -                  "map-pin",
        -                  "storefront",
        -                  "tools",
        -                  "beaker",
        -                  "lifebuoy",
        -                  "chat",
        -                  "envelope",
        -                  "phone",
        -                  "cake",
        -                  "scale",
        -                  "eye"
        -                ],
        -                "example": "star",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Optional icon shown before the badge text. `null` removes it."
        -          },
        -          "billingType": {
        -            "anyOf": [
        -              {
        -                "enum": [
        -                  "one_time",
        -                  "recurring"
        -                ],
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Billing type. Derived when omitted: `recurring`/`paymentPlan` present → recurring, else one_time. Part of the pricing-type identity fixed at creation — cannot change on an existing price."
        -          },
        -          "currency": {
        -            "anyOf": [
        -              {
        -                "maxLength": 3,
        -                "minLength": 3,
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Currency code (lowercase). Defaults to `usd`.",
        -            "example": "usd"
        -          },
        -          "discountedFromPrice": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "The original price of the product in the smallest currency unit (cents).",
        -            "example": 9900
        -          },
        -          "enabled": {
        -            "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "hidden": {
        -            "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "id": {
        -            "description": "Existing price id (omit when creating a new price).",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "label": {
        -            "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "order": {
        -            "description": "Dashboard display order. Lower numbers appear first.",
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "payWhatYouWant": {
        -            "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "paymentPlan": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                            "example": 1
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval for subscriptions.",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 1,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1
        -                  },
        -                  "planIterations": {
        -                    "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -                    "example": 3,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins.",
        -                    "example": "2026-02-25T06:40:09.463Z"
        -                  },
        -                  "trialPeriodDays": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Trial period in days for subscriptions."
        -                  }
        -                },
        -                "required": [
        -                  "planIterations"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        -          },
        -          "pricingType": {
        -            "anyOf": [
        -              {
        -                "description": "Pricing type for this product - single price or multiple prices using variants.",
        -                "enum": [
        -                  "single",
        -                  "multiple"
        -                ],
        -                "example": "single",
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "deprecated": true,
        -            "description": "Deprecated — superseded by `prices[]`. Accepted and ignored.",
        -            "example": "single"
        -          },
        -          "pwywSuggestedPrice": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        -            "example": 2500
        -          },
        -          "recurring": {
        -            "anyOf": [
        -              {
        -                "properties": {
        -                  "billingCycleAnchorConfig": {
        -                    "anyOf": [
        -                      {
        -                        "properties": {
        -                          "dayOfMonth": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 31,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ],
        -                            "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                            "example": 1
        -                          },
        -                          "enabled": {
        -                            "type": [
        -                              "boolean",
        -                              "null"
        -                            ]
        -                          },
        -                          "month": {
        -                            "anyOf": [
        -                              {
        -                                "maximum": 12,
        -                                "minimum": 1,
        -                                "type": "number"
        -                              },
        -                              {
        -                                "type": "null"
        -                              }
        -                            ]
        -                          }
        -                        },
        -                        "type": "object"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ]
        -                  },
        -                  "interval": {
        -                    "anyOf": [
        -                      {
        -                        "enum": [
        -                          "day",
        -                          "week",
        -                          "month",
        -                          "year"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Billing interval for subscriptions.",
        -                    "example": "month"
        -                  },
        -                  "intervalCount": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 1,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Number of intervals between billings.",
        -                    "example": 1
        -                  },
        -                  "startDate": {
        -                    "anyOf": [
        -                      {
        -                        "format": "date-time",
        -                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "The date on which the subscription begins.",
        -                    "example": "2026-02-25T06:40:09.463Z"
        -                  },
        -                  "trialPeriodDays": {
        -                    "anyOf": [
        -                      {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "null"
        -                      }
        -                    ],
        -                    "description": "Trial period in days for subscriptions."
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "The recurring components of a price such as `interval` and `intervalCount`"
        -          },
        -          "reference": {
        -            "description": "Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference.",
        -            "example": "price_one_time_fixed_5000",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "setupFee": {
        -            "anyOf": [
        -              {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "One-time setup fee in cents."
        -          },
        -          "setupFeeMultipliesWithQuantity": {
        -            "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        -            "example": false,
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "pricePicker": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "description": {
        -                "description": "Text shown under the heading, above the price options. Line breaks are kept.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "priceDisplayDefaults": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "type": "string"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Per-axis default tab selection. Keyed by grouping axis. E.g. `{ interval: \"Monthly\" }`."
        -              },
        -              "priceDisplayLabels": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "additionalProperties": {
        -                        "type": "string"
        -                      },
        -                      "propertyNames": {
        -                        "type": "string"
        -                      },
        -                      "type": "object"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Per-axis label overrides for price tabs. Keyed by grouping axis (`billing` or `interval`), then by derived group name. E.g. `{ interval: { \"One-time\": \"Lifetime\" } }`."
        -              },
        -              "priceDisplayTabOrder": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": {
        -                      "items": {
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    "propertyNames": {
        -                      "type": "string"
        -                    },
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "Per-axis tab display order. Keyed by grouping axis, value is ordered array of group names. E.g. `{ interval: [\"Monthly\", \"Yearly\"] }`."
        -              },
        -              "shortenDescription": {
        -                "description": "Cut long price descriptions to their first lines behind a Show more link. Defaults to `true`.",
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "title": {
        -                "description": "Heading shown above the price options.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        -      },
        -      "prices": {
        -        "description": "Explicit price list for this product. When provided alongside variants, use `variant.priceIds` to scope each variant group to its price. At least one entry must be enabled. When present, `prices[]` takes precedence over the legacy `price` field for determining what is shown at checkout.\n\nExample — one-time + monthly subscription:\n```json\n[\n  { \"billingType\": \"one_time\", \"amount\": 4900, \"currency\": \"usd\", \"label\": \"One-time\" },\n  { \"billingType\": \"recurring\", \"amount\": 1000, \"currency\": \"usd\", \"label\": \"Monthly\", \"recurring\": { \"interval\": \"month\", \"intervalCount\": 1 } }\n]\n```",
        -        "example": [
        -          {
        -            "amount": 4900,
        -            "billingType": "one_time",
        -            "currency": "usd",
        -            "label": "One-time"
        -          },
        -          {
        -            "amount": 1000,
        -            "billingType": "recurring",
        -            "currency": "usd",
        -            "label": "Monthly",
        -            "recurring": {
        -              "interval": "month",
        -              "intervalCount": 1
        -            }
        -          }
        -        ],
        -        "items": {
        -          "properties": {
        -            "amount": {
        -              "description": "Price in smallest currency unit (cents).",
        -              "example": 4900,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "badge": {
        -              "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "badgeIcon": {
        -              "anyOf": [
        -                {
        -                  "description": "Icon shown before the badge text.",
        -                  "enum": [
        -                    "star",
        -                    "sparkles",
        -                    "fire",
        -                    "bolt",
        -                    "rocket",
        -                    "trophy",
        -                    "check",
        -                    "x-mark",
        -                    "plus",
        -                    "arrow-right",
        -                    "check-badge",
        -                    "check-circle",
        -                    "shield-check",
        -                    "thumbs-up",
        -                    "heart",
        -                    "smile",
        -                    "light-bulb",
        -                    "sun",
        -                    "moon",
        -                    "gift",
        -                    "tag",
        -                    "percent",
        -                    "dollar",
        -                    "banknotes",
        -                    "credit-card",
        -                    "shopping-bag",
        -                    "shopping-cart",
        -                    "truck",
        -                    "clock",
        -                    "calendar",
        -                    "bell",
        -                    "megaphone",
        -                    "trending-up",
        -                    "chart",
        -                    "refresh",
        -                    "lock",
        -                    "key",
        -                    "ticket",
        -                    "users",
        -                    "academic-cap",
        -                    "book",
        -                    "music",
        -                    "video",
        -                    "document",
        -                    "download",
        -                    "mobile",
        -                    "camera",
        -                    "paint-brush",
        -                    "puzzle",
        -                    "cube",
        -                    "globe",
        -                    "map-pin",
        -                    "storefront",
        -                    "tools",
        -                    "beaker",
        -                    "lifebuoy",
        -                    "chat",
        -                    "envelope",
        -                    "phone",
        -                    "cake",
        -                    "scale",
        -                    "eye"
        -                  ],
        -                  "example": "star",
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Optional icon shown before the badge text. `null` removes it."
        -            },
        -            "billingType": {
        -              "description": "Billing type. Part of the pricing-type identity fixed at creation — cannot change on an existing price.",
        -              "enum": [
        -                "one_time",
        -                "recurring"
        -              ],
        -              "example": "one_time",
        -              "type": "string"
        -            },
        -            "currency": {
        -              "anyOf": [
        -                {
        -                  "maxLength": 3,
        -                  "minLength": 3,
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Currency code (lowercase). Defaults to `usd`.",
        -              "example": "usd"
        -            },
        -            "discountedFromPrice": {
        -              "anyOf": [
        -                {
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The original price of the product in the smallest currency unit (cents).",
        -              "example": 9900
        -            },
        -            "enabled": {
        -              "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "hidden": {
        -              "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "id": {
        -              "description": "Existing price id (omit when creating a new price).",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "label": {
        -              "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "order": {
        -              "description": "Dashboard display order. Lower numbers appear first.",
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "payWhatYouWant": {
        -              "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "paymentPlan": {
        -              "anyOf": [
        -                {
        -                  "properties": {
        -                    "billingCycleAnchorConfig": {
        -                      "anyOf": [
        -                        {
        -                          "properties": {
        -                            "dayOfMonth": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 31,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ],
        -                              "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                              "example": 1
        -                            },
        -                            "enabled": {
        -                              "type": [
        -                                "boolean",
        -                                "null"
        -                              ]
        -                            },
        -                            "month": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 12,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ]
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "interval": {
        -                      "anyOf": [
        -                        {
        -                          "enum": [
        -                            "day",
        -                            "week",
        -                            "month",
        -                            "year"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Billing interval for subscriptions.",
        -                      "example": "month"
        -                    },
        -                    "intervalCount": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Number of intervals between billings.",
        -                      "example": 1
        -                    },
        -                    "planIterations": {
        -                      "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -                      "example": 3,
        -                      "minimum": 1,
        -                      "type": "number"
        -                    },
        -                    "startDate": {
        -                      "anyOf": [
        -                        {
        -                          "format": "date-time",
        -                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date on which the subscription begins.",
        -                      "example": "2026-02-25T06:40:09.463Z"
        -                    },
        -                    "trialPeriodDays": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 0,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Trial period in days for subscriptions."
        -                    }
        -                  },
        -                  "required": [
        -                    "planIterations"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        -            },
        -            "pwywSuggestedPrice": {
        -              "anyOf": [
        -                {
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        -              "example": 2500
        -            },
        -            "recurring": {
        -              "anyOf": [
        -                {
        -                  "properties": {
        -                    "billingCycleAnchorConfig": {
        -                      "anyOf": [
        -                        {
        -                          "properties": {
        -                            "dayOfMonth": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 31,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ],
        -                              "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                              "example": 1
        -                            },
        -                            "enabled": {
        -                              "type": [
        -                                "boolean",
        -                                "null"
        -                              ]
        -                            },
        -                            "month": {
        -                              "anyOf": [
        -                                {
        -                                  "maximum": 12,
        -                                  "minimum": 1,
        -                                  "type": "number"
        -                                },
        -                                {
        -                                  "type": "null"
        -                                }
        -                              ]
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "interval": {
        -                      "anyOf": [
        -                        {
        -                          "enum": [
        -                            "day",
        -                            "week",
        -                            "month",
        -                            "year"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Billing interval for subscriptions.",
        -                      "example": "month"
        -                    },
        -                    "intervalCount": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Number of intervals between billings.",
        -                      "example": 1
        -                    },
        -                    "startDate": {
        -                      "anyOf": [
        -                        {
        -                          "format": "date-time",
        -                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "The date on which the subscription begins.",
        -                      "example": "2026-02-25T06:40:09.463Z"
        -                    },
        -                    "trialPeriodDays": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 0,
        -                          "type": "number"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "description": "Trial period in days for subscriptions."
        -                    }
        -                  },
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "The recurring components of a price such as `interval` and `intervalCount`"
        -            },
        -            "reference": {
        -              "description": "Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference.",
        -              "example": "price_one_time_fixed_5000",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "setupFee": {
        -              "anyOf": [
        -                {
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "One-time setup fee in cents."
        -            },
        -            "setupFeeMultipliesWithQuantity": {
        -              "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        -              "example": false,
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            }
        -          },
        -          "required": [
        -            "amount",
        -            "billingType"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "sku": {
        -        "anyOf": [
        -          {
        -            "maxLength": 200,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "SKU of the product."
        -      },
        -      "stock": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Available stock of the product.",
        -        "example": 100
        -      },
        -      "taxBehavior": {
        -        "anyOf": [
        -          {
        -            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        -            "enum": [
        -              "inclusive",
        -              "exclusive",
        -              "automatic",
        -              ""
        -            ],
        -            "example": "exclusive",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "If Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.",
        -        "example": ""
        -      },
        -      "taxCode": {
        -        "anyOf": [
        -          {
        -            "pattern": "^(txcd_[a-zA-Z0-9]+)?$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "If Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings."
        -      },
        -      "title": {
        -        "anyOf": [
        -          {
        -            "maxLength": 200,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product title. Defaults to page name if not provided.",
        -        "example": "Premium Course"
        -      },
        -      "variants": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "properties": {
        -                "hidden": {
        -                  "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "increasesWithQuantity": {
        -                  "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "key": {
        -                  "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
        -                  "example": "select-package-tier",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "layout": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "collapseVariantOptions": {
        -                          "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
        -                          "example": false,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "imageSize": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "small",
        -                                "medium",
        -                                "large",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Size of variant option images. Defaults to `small`.",
        -                          "example": "small"
        -                        },
        -                        "showPwywPlaceholder": {
        -                          "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantName": {
        -                          "description": "Show the variant name. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionNames": {
        -                          "description": "Show variant option names. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPriceSign": {
        -                          "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "showVariantOptionPrices": {
        -                          "description": "Show variant option prices. Defaults to `true`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "spacing": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "comfortable",
        -                                "compact",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Spacing between variant options. Defaults to `comfortable`.",
        -                          "example": "comfortable"
        -                        },
        -                        "textAlign": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "left",
        -                                "center",
        -                                "stack",
        -                                ""
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Text alignment for variant options. Defaults to `left`.",
        -                          "example": "left"
        -                        },
        -                        "variantOptionColumns": {
        -                          "anyOf": [
        -                            {
        -                              "maximum": 10,
        -                              "minimum": 1,
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Number of columns for grid layout. Defaults to `2`.",
        -                          "example": 2
        -                        },
        -                        "variantOptionLayout": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "list",
        -                                "grid"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Layout style for variant options. Defaults to `list`.",
        -                          "example": "list"
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Layout configuration for this variant."
        -                },
        -                "manageVariantOptionStock": {
        -                  "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "name": {
        -                  "description": "Name of the variant.",
        -                  "example": "Plan Type",
        -                  "type": "string"
        -                },
        -                "options": {
        -                  "description": "Options within this variant. Variant must have at least one option.",
        -                  "items": {
        -                    "properties": {
        -                      "additionalChargeAmount": {
        -                        "description": "The additional charge for selecting this variant option in cents.",
        -                        "example": 1000,
        -                        "type": [
        -                          "number",
        -                          "null"
        -                        ]
        -                      },
        -                      "description": {
        -                        "description": "Description of the variant option. Supports HTML or plain text.",
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "discountedFromPrice": {
        -                        "anyOf": [
        -                          {
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "The original price of this variant option in cents.",
        -                        "example": 1500
        -                      },
        -                      "fileIds": {
        -                        "anyOf": [
        -                          {
        -                            "items": {
        -                              "pattern": "^[0-9a-fA-F]{24}$",
        -                              "type": "string"
        -                            },
        -                            "type": "array"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Files specific to this variant option. Available to the customer after purchase."
        -                      },
        -                      "imageId": {
        -                        "anyOf": [
        -                          {
        -                            "pattern": "^[0-9a-fA-F]{24}$",
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ]
        -                      },
        -                      "key": {
        -                        "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
        -                        "example": "pro-option",
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "name": {
        -                        "description": "Name of the variant option.",
        -                        "example": "Basic",
        -                        "type": "string"
        -                      },
        -                      "payWhatYouWant": {
        -                        "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
        -                        "example": false,
        -                        "type": [
        -                          "boolean",
        -                          "null"
        -                        ]
        -                      },
        -                      "pwywSuggestedPrice": {
        -                        "anyOf": [
        -                          {
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
        -                        "example": 2500
        -                      },
        -                      "sku": {
        -                        "description": "SKU for this option.",
        -                        "type": [
        -                          "string",
        -                          "null"
        -                        ]
        -                      },
        -                      "status": {
        -                        "anyOf": [
        -                          {
        -                            "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                            "enum": [
        -                              "enabled",
        -                              "disabled",
        -                              "deleted"
        -                            ],
        -                            "example": "enabled",
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Status of the variant option. Defaults to `enabled`.",
        -                        "example": "enabled"
        -                      },
        -                      "stock": {
        -                        "description": "Stock quantity for this option.",
        -                        "example": 10,
        -                        "type": [
        -                          "number",
        -                          "null"
        -                        ]
        -                      },
        -                      "type": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "one_time",
        -                              "recurring"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
        -                        "example": "one_time"
        -                      }
        -                    },
        -                    "required": [
        -                      "name"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "minItems": 1,
        -                  "type": "array"
        -                },
        -                "order": {
        -                  "description": "Display order of the variant. Defaults to `0`.",
        -                  "example": 0,
        -                  "type": [
        -                    "number",
        -                    "null"
        -                  ]
        -                },
        -                "preselect": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "enabled": {
        -                          "description": "Enable preselecting a variant option. Defaults to `false`.",
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "optionId": {
        -                          "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
        -                          "example": "pro-option",
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        },
        -                        "quantity": {
        -                          "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
        -                          "example": 2,
        -                          "type": [
        -                            "number",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Preselect configuration for this variant.",
        -                  "example": {
        -                    "enabled": true,
        -                    "optionId": "pro-option",
        -                    "quantity": 1
        -                  }
        -                },
        -                "priceIds": {
        -                  "anyOf": [
        -                    {
        -                      "items": {
        -                        "pattern": "^[0-9a-fA-F]{24}$",
        -                        "type": "string"
        -                      },
        -                      "type": "array"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
        -                  "example": [
        -                    "507f1f77bcf86cd799439011"
        -                  ]
        -                },
        -                "reference": {
        -                  "anyOf": [
        -                    {
        -                      "maxLength": 36,
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "External reference ID. Generated from the variant name when omitted.",
        -                  "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
        -                },
        -                "required": {
        -                  "description": "Whether the customer must select at least one option in the variant.",
        -                  "example": true,
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                },
        -                "selectionType": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        -                      "enum": [
        -                        "single",
        -                        "multiple",
        -                        "quantity"
        -                      ],
        -                      "example": "single",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
        -                  "example": "single"
        -                },
        -                "showHideLogic": {
        -                  "anyOf": [
        -                    {
        -                      "properties": {
        -                        "comparison": {
        -                          "anyOf": [
        -                            {
        -                              "enum": [
        -                                "is",
        -                                "is_not",
        -                                "is_empty",
        -                                "is_not_empty",
        -                                "contains"
        -                              ],
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
        -                          "example": "is"
        -                        },
        -                        "element": {
        -                          "anyOf": [
        -                            {
        -                              "properties": {
        -                                "elementId": {
        -                                  "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
        -                                  "example": "select-package-tier",
        -                                  "type": [
        -                                    "string",
        -                                    "null"
        -                                  ]
        -                                }
        -                              },
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "description": "Element (variant) to compare against."
        -                        },
        -                        "enabled": {
        -                          "description": "Enable conditional show/hide logic. Defaults to `false`.",
        -                          "example": true,
        -                          "type": [
        -                            "boolean",
        -                            "null"
        -                          ]
        -                        },
        -                        "value": {
        -                          "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
        -                          "example": "pro-option",
        -                          "type": [
        -                            "string",
        -                            "null"
        -                          ]
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Conditional logic to show or hide this variant based on other form elements."
        -                },
        -                "status": {
        -                  "anyOf": [
        -                    {
        -                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        -                      "enum": [
        -                        "enabled",
        -                        "disabled",
        -                        "deleted"
        -                      ],
        -                      "example": "enabled",
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Status of the variant. Defaults to `enabled`",
        -                  "example": "enabled"
        -                },
        -                "useVariantOptionSkus": {
        -                  "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
        -                  "type": [
        -                    "boolean",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "name",
        -                "options"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Product variants and options. To link a discount to specific variant options, assign a `key` to each relevant option here and reference those keys in `discounts[].variantOptionIds[].key` within the same request."
        -      },
        -      "variantsRequired": {
        -        "description": "Use 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`.",
        -        "example": false,
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "defaultPriceId": {
        +        "description": "ID of the price pre-selected at checkout. Must reference an existing price `id` in `prices[]`. When omitted and there are several prices, checkout opens with none selected so the buyer chooses one.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "description": "Description of the product. Accepts HTML or plain text.",
        +        "example": "Join our premium course today learn more at <a href=\"https://checkoutpage.com\">Checkout Page</a>.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "discounts": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "amountOff": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Fixed amount discount in cents. Cannot be used with `percentOff`.",
        +                  "example": 500
        +                },
        +                "maxQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Maximum quantity for this discount tier. Leave empty for no upper limit.",
        +                  "example": 10
        +                },
        +                "minQuantity": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Minimum quantity required for this discount to apply.",
        +                  "example": 5
        +                },
        +                "percentOff": {
        +                  "anyOf": [
        +                    {
        +                      "maximum": 100,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Percentage discount to apply. Cannot be used with `amountOff`.",
        +                  "example": 10
        +                },
        +                "quantityCondition": {
        +                  "description": "How this bulk discount is triggered. Use `checkout_quantity` to apply the discount based on the total checkout quantity. Use `variant_option_quantity` only when this same request also includes `variants` and matching option `key` values referenced by `variantOptionIds`. Defaults to `checkout_quantity`.",
        +                  "enum": [
        +                    "checkout_quantity",
        +                    "variant_option_quantity"
        +                  ],
        +                  "example": "checkout_quantity",
        +                  "type": "string"
        +                },
        +                "variantOptionIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "properties": {
        +                          "key": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "key"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Variant option keys that this discount applies to. Only use this when `quantityCondition` is `variant_option_quantity`. Each entry must exactly match a temporary `key` from `variants[].options[].key` in the same request. These keys are caller-defined handles that are resolved to MongoDB ObjectIds at save time and do not appear in the response."
        +                }
        +              },
        +              "required": [
        +                "quantityCondition"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Bulk discounts for the product.\n\nUse `checkout_quantity` when the discount should apply to the total checkout quantity.\n\nUse `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:\n1. Include `productData.variants`.\n2. Give each target variant option a temporary `key` in `variants[].options[].key`.\n3. Reference those exact keys in `discounts[].variantOptionIds[].key`.\n\n- `variants[].options`: [{ name: \"Red\", key: \"red\" }, { name: \"Blue\", key: \"blue\" }]\n- `discounts`: [{ quantityCondition: \"variant_option_quantity\", variantOptionIds: [{ key: \"red\" }, { key: \"blue\" }], minQuantity: 3, percentOff: 10 }]\n\n[Learn more](https://checkoutpage.com/docs/articles/bulk-discounts)",
        +        "example": [
        +          {
        +            "minQuantity": 3,
        +            "percentOff": 10,
        +            "quantityCondition": "variant_option_quantity",
        +            "variantOptionIds": [
        +              {
        +                "key": "red"
        +              },
        +              {
        +                "key": "blue"
        +              }
        +            ]
        +          }
        +        ]
        +      },
        +      "enableFileAccessForInactiveSubscriptions": {
        +        "description": "Allow customers with inactive subscriptions to keep accessing file downloads.",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "fileIds": {
        +        "description": "Files for the product. Available to the customer after purchase.",
        +        "example": [
        +          "507f1f77bcf86cd799439011"
        +        ],
        +        "items": {
        +          "pattern": "^[0-9a-fA-F]{24}$",
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "fixedTaxRateIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "maxItems": 1,
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "List of Tax Rate IDs applied to this product. When the page's `tax.mode` is `fixed` and this is omitted on create, the seller default rate is applied. Call `list_tax_rates` first to find an existing rate; use `create_tax_rate` to add a new one."
        +      },
        +      "generateLicenseKeys": {
        +        "description": "If true, on purchase a license key for the product is generated",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "hasUnlimitedStock": {
        +        "description": "Whether or not the stock of the product is unlimited. If set to `true`, the `stock` field is ignored.",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "imageIds": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "pattern": "^[0-9a-fA-F]{24}$",
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Images for the product. Provide a list of image file IDs. Use the `/files/upload` API to add images.",
        +        "example": [
        +          "507f1f77bcf86cd799439011"
        +        ]
        +      },
        +      "limitPayments": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "description": "Prevent a customer who has already paid for this product from paying again. One-time payments only. Defaults to `false`.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Duplicate-payment prevention settings for this product. Applies to one-time payments only."
        +      },
        +      "limitSubscriptions": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "enabled": {
        +                "description": "Enable subscription limits. Defaults to `false`.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "limitSubscriptionsStripe": {
        +                "anyOf": [
        +                  {
        +                    "properties": {
        +                      "enabled": {
        +                        "description": "Enable Stripe-level subscription limits (checks active subscriptions in Stripe). Defaults to `false`.",
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Stripe-specific subscription limit configuration."
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Configuration to limit the number of active subscriptions for this product. Used to cap subscriptions to a specific number."
        +      },
        +      "price": {
        +        "description": "The singular way to set a product price — equivalent to `prices: [entry]` and materialized as one. When `prices` is also provided it takes precedence and `price` is ignored. On update, `price` is only valid while the product has at most one price (a legacy product transitions to `prices[]` on first use); products with multiple prices must be updated through `prices[]`.",
        +        "properties": {
        +          "amount": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Price in smallest currency unit (cents). Defaults to `0`.",
        +            "example": 4900
        +          },
        +          "badge": {
        +            "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "badgeIcon": {
        +            "anyOf": [
        +              {
        +                "description": "Icon shown before the badge text.",
        +                "enum": [
        +                  "star",
        +                  "sparkles",
        +                  "fire",
        +                  "bolt",
        +                  "rocket",
        +                  "trophy",
        +                  "check",
        +                  "x-mark",
        +                  "plus",
        +                  "arrow-right",
        +                  "check-badge",
        +                  "check-circle",
        +                  "shield-check",
        +                  "thumbs-up",
        +                  "heart",
        +                  "smile",
        +                  "light-bulb",
        +                  "sun",
        +                  "moon",
        +                  "gift",
        +                  "tag",
        +                  "percent",
        +                  "dollar",
        +                  "banknotes",
        +                  "credit-card",
        +                  "shopping-bag",
        +                  "shopping-cart",
        +                  "truck",
        +                  "clock",
        +                  "calendar",
        +                  "bell",
        +                  "megaphone",
        +                  "trending-up",
        +                  "chart",
        +                  "refresh",
        +                  "lock",
        +                  "key",
        +                  "ticket",
        +                  "users",
        +                  "academic-cap",
        +                  "book",
        +                  "music",
        +                  "video",
        +                  "document",
        +                  "download",
        +                  "mobile",
        +                  "camera",
        +                  "paint-brush",
        +                  "puzzle",
        +                  "cube",
        +                  "globe",
        +                  "map-pin",
        +                  "storefront",
        +                  "tools",
        +                  "beaker",
        +                  "lifebuoy",
        +                  "chat",
        +                  "envelope",
        +                  "phone",
        +                  "cake",
        +                  "scale",
        +                  "eye"
        +                ],
        +                "example": "star",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Optional icon shown before the badge text. `null` removes it."
        +          },
        +          "billingType": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "one_time",
        +                  "recurring"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Billing type. Derived when omitted: `recurring`/`paymentPlan` present → recurring, else one_time. Part of the pricing-type identity fixed at creation — cannot change on an existing price."
        +          },
        +          "currency": {
        +            "anyOf": [
        +              {
        +                "maxLength": 3,
        +                "minLength": 3,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Currency code (lowercase). Defaults to `usd`.",
        +            "example": "usd"
        +          },
        +          "discountedFromPrice": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The original price of the product in the smallest currency unit (cents).",
        +            "example": 9900
        +          },
        +          "enabled": {
        +            "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "hidden": {
        +            "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "description": "Existing price id (omit when creating a new price).",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "label": {
        +            "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "order": {
        +            "description": "Dashboard display order. Lower numbers appear first.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "payWhatYouWant": {
        +            "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "paymentPlan": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                            "example": 1
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval for subscriptions.",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 1,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1
        +                  },
        +                  "planIterations": {
        +                    "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +                    "example": 3,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins.",
        +                    "example": "2026-02-25T06:40:09.463Z"
        +                  },
        +                  "trialPeriodDays": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Trial period in days for subscriptions."
        +                  }
        +                },
        +                "required": [
        +                  "planIterations"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        +          },
        +          "pricingType": {
        +            "anyOf": [
        +              {
        +                "description": "Pricing type for this product - single price or multiple prices using variants.",
        +                "enum": [
        +                  "single",
        +                  "multiple"
        +                ],
        +                "example": "single",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "deprecated": true,
        +            "description": "Deprecated — superseded by `prices[]`. Accepted and ignored.",
        +            "example": "single"
        +          },
        +          "pwywSuggestedPrice": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        +            "example": 2500
        +          },
        +          "recurring": {
        +            "anyOf": [
        +              {
        +                "properties": {
        +                  "billingCycleAnchorConfig": {
        +                    "anyOf": [
        +                      {
        +                        "properties": {
        +                          "dayOfMonth": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 31,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ],
        +                            "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                            "example": 1
        +                          },
        +                          "enabled": {
        +                            "type": [
        +                              "boolean",
        +                              "null"
        +                            ]
        +                          },
        +                          "month": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 12,
        +                                "minimum": 1,
        +                                "type": "number"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "interval": {
        +                    "anyOf": [
        +                      {
        +                        "enum": [
        +                          "day",
        +                          "week",
        +                          "month",
        +                          "year"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Billing interval for subscriptions.",
        +                    "example": "month"
        +                  },
        +                  "intervalCount": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 1,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Number of intervals between billings.",
        +                    "example": 1
        +                  },
        +                  "startDate": {
        +                    "anyOf": [
        +                      {
        +                        "format": "date-time",
        +                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "The date on which the subscription begins.",
        +                    "example": "2026-02-25T06:40:09.463Z"
        +                  },
        +                  "trialPeriodDays": {
        +                    "anyOf": [
        +                      {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Trial period in days for subscriptions."
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The recurring components of a price such as `interval` and `intervalCount`"
        +          },
        +          "reference": {
        +            "description": "Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference.",
        +            "example": "price_one_time_fixed_5000",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "setupFee": {
        +            "anyOf": [
        +              {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "One-time setup fee in cents."
        +          },
        +          "setupFeeMultipliesWithQuantity": {
        +            "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        +            "example": false,
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "pricePicker": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "description": {
        +                "description": "Text shown under the heading, above the price options. Line breaks are kept.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "priceDisplayDefaults": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "type": "string"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Per-axis default tab selection. Keyed by grouping axis. E.g. `{ interval: \"Monthly\" }`."
        +              },
        +              "priceDisplayLabels": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Per-axis label overrides for price tabs. Keyed by grouping axis (`billing` or `interval`), then by derived group name. E.g. `{ interval: { \"One-time\": \"Lifetime\" } }`."
        +              },
        +              "priceDisplayTabOrder": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Per-axis tab display order. Keyed by grouping axis, value is ordered array of group names. E.g. `{ interval: [\"Monthly\", \"Yearly\"] }`."
        +              },
        +              "shortenDescription": {
        +                "description": "Cut long price descriptions to their first lines behind a Show more link. Defaults to `true`.",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "description": "Heading shown above the price options.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Price picker settings: the heading and description above the options, Show more / less, and tab labels, defaults and order."
        +      },
        +      "prices": {
        +        "description": "Explicit price list for this product. When provided alongside variants, use `variant.priceIds` to scope each variant group to its price. At least one entry must be enabled. When present, `prices[]` takes precedence over the legacy `price` field for determining what is shown at checkout.\n\nExample — one-time + monthly subscription:\n```json\n[\n  { \"billingType\": \"one_time\", \"amount\": 4900, \"currency\": \"usd\", \"label\": \"One-time\" },\n  { \"billingType\": \"recurring\", \"amount\": 1000, \"currency\": \"usd\", \"label\": \"Monthly\", \"recurring\": { \"interval\": \"month\", \"intervalCount\": 1 } }\n]\n```",
        +        "example": [
        +          {
        +            "amount": 4900,
        +            "billingType": "one_time",
        +            "currency": "usd",
        +            "label": "One-time"
        +          },
        +          {
        +            "amount": 1000,
        +            "billingType": "recurring",
        +            "currency": "usd",
        +            "label": "Monthly",
        +            "recurring": {
        +              "interval": "month",
        +              "intervalCount": 1
        +            }
        +          }
        +        ],
        +        "items": {
        +          "properties": {
        +            "amount": {
        +              "description": "Price in smallest currency unit (cents).",
        +              "example": 4900,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "badge": {
        +              "description": "Optional short label shown over the price card (e.g. \"Save $50\", \"Most popular\").",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "badgeIcon": {
        +              "anyOf": [
        +                {
        +                  "description": "Icon shown before the badge text.",
        +                  "enum": [
        +                    "star",
        +                    "sparkles",
        +                    "fire",
        +                    "bolt",
        +                    "rocket",
        +                    "trophy",
        +                    "check",
        +                    "x-mark",
        +                    "plus",
        +                    "arrow-right",
        +                    "check-badge",
        +                    "check-circle",
        +                    "shield-check",
        +                    "thumbs-up",
        +                    "heart",
        +                    "smile",
        +                    "light-bulb",
        +                    "sun",
        +                    "moon",
        +                    "gift",
        +                    "tag",
        +                    "percent",
        +                    "dollar",
        +                    "banknotes",
        +                    "credit-card",
        +                    "shopping-bag",
        +                    "shopping-cart",
        +                    "truck",
        +                    "clock",
        +                    "calendar",
        +                    "bell",
        +                    "megaphone",
        +                    "trending-up",
        +                    "chart",
        +                    "refresh",
        +                    "lock",
        +                    "key",
        +                    "ticket",
        +                    "users",
        +                    "academic-cap",
        +                    "book",
        +                    "music",
        +                    "video",
        +                    "document",
        +                    "download",
        +                    "mobile",
        +                    "camera",
        +                    "paint-brush",
        +                    "puzzle",
        +                    "cube",
        +                    "globe",
        +                    "map-pin",
        +                    "storefront",
        +                    "tools",
        +                    "beaker",
        +                    "lifebuoy",
        +                    "chat",
        +                    "envelope",
        +                    "phone",
        +                    "cake",
        +                    "scale",
        +                    "eye"
        +                  ],
        +                  "example": "star",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Optional icon shown before the badge text. `null` removes it."
        +            },
        +            "billingType": {
        +              "description": "Billing type. Part of the pricing-type identity fixed at creation — cannot change on an existing price.",
        +              "enum": [
        +                "one_time",
        +                "recurring"
        +              ],
        +              "example": "one_time",
        +              "type": "string"
        +            },
        +            "currency": {
        +              "anyOf": [
        +                {
        +                  "maxLength": 3,
        +                  "minLength": 3,
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Currency code (lowercase). Defaults to `usd`.",
        +              "example": "usd"
        +            },
        +            "discountedFromPrice": {
        +              "anyOf": [
        +                {
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The original price of the product in the smallest currency unit (cents).",
        +              "example": 9900
        +            },
        +            "enabled": {
        +              "description": "Whether this price is selectable by customers. Defaults to `true`. At least one price must remain enabled.",
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "hidden": {
        +              "description": "Hide this price. Hidden prices can still be shown using query parameters.",
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "id": {
        +              "description": "Existing price id (omit when creating a new price).",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "label": {
        +              "description": "Optional seller-facing label for this price (e.g. \"Monthly\", \"Annual\").",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "order": {
        +              "description": "Dashboard display order. Lower numbers appear first.",
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "payWhatYouWant": {
        +              "description": "If enabled `amount` field becomes the minimum price and customers can choose to pay what they want. If `amount` is empty or `0` customer can purchase the product for free. Pay What You Want applies to one-time prices and subscriptions, but not payment plans.",
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "paymentPlan": {
        +              "anyOf": [
        +                {
        +                  "properties": {
        +                    "billingCycleAnchorConfig": {
        +                      "anyOf": [
        +                        {
        +                          "properties": {
        +                            "dayOfMonth": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 31,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ],
        +                              "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                              "example": 1
        +                            },
        +                            "enabled": {
        +                              "type": [
        +                                "boolean",
        +                                "null"
        +                              ]
        +                            },
        +                            "month": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 12,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ]
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "interval": {
        +                      "anyOf": [
        +                        {
        +                          "enum": [
        +                            "day",
        +                            "week",
        +                            "month",
        +                            "year"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Billing interval for subscriptions.",
        +                      "example": "month"
        +                    },
        +                    "intervalCount": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 1,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Number of intervals between billings.",
        +                      "example": 1
        +                    },
        +                    "planIterations": {
        +                      "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +                      "example": 3,
        +                      "minimum": 1,
        +                      "type": "number"
        +                    },
        +                    "startDate": {
        +                      "anyOf": [
        +                        {
        +                          "format": "date-time",
        +                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "The date on which the subscription begins.",
        +                      "example": "2026-02-25T06:40:09.463Z"
        +                    },
        +                    "trialPeriodDays": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Trial period in days for subscriptions."
        +                    }
        +                  },
        +                  "required": [
        +                    "planIterations"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The payment plan components of a price such as `interval` and `intervalCount`"
        +            },
        +            "pwywSuggestedPrice": {
        +              "anyOf": [
        +                {
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Suggested price in cents shown to customers when `payWhatYouWant` is `true`.",
        +              "example": 2500
        +            },
        +            "recurring": {
        +              "anyOf": [
        +                {
        +                  "properties": {
        +                    "billingCycleAnchorConfig": {
        +                      "anyOf": [
        +                        {
        +                          "properties": {
        +                            "dayOfMonth": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 31,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ],
        +                              "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                              "example": 1
        +                            },
        +                            "enabled": {
        +                              "type": [
        +                                "boolean",
        +                                "null"
        +                              ]
        +                            },
        +                            "month": {
        +                              "anyOf": [
        +                                {
        +                                  "maximum": 12,
        +                                  "minimum": 1,
        +                                  "type": "number"
        +                                },
        +                                {
        +                                  "type": "null"
        +                                }
        +                              ]
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "interval": {
        +                      "anyOf": [
        +                        {
        +                          "enum": [
        +                            "day",
        +                            "week",
        +                            "month",
        +                            "year"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Billing interval for subscriptions.",
        +                      "example": "month"
        +                    },
        +                    "intervalCount": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 1,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Number of intervals between billings.",
        +                      "example": 1
        +                    },
        +                    "startDate": {
        +                      "anyOf": [
        +                        {
        +                          "format": "date-time",
        +                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "The date on which the subscription begins.",
        +                      "example": "2026-02-25T06:40:09.463Z"
        +                    },
        +                    "trialPeriodDays": {
        +                      "anyOf": [
        +                        {
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Trial period in days for subscriptions."
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "The recurring components of a price such as `interval` and `intervalCount`"
        +            },
        +            "reference": {
        +              "description": "Merchant-facing internal id used in exports and reports (SKU-like). Derived from the price data when omitted, e.g. `price_one_time_fixed_5000`. A price resent by id keeps its stored reference.",
        +              "example": "price_one_time_fixed_5000",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "setupFee": {
        +              "anyOf": [
        +                {
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "One-time setup fee in cents."
        +            },
        +            "setupFeeMultipliesWithQuantity": {
        +              "description": "Whether or not the setup fee is multipled by the selected quantity. Applies to `one-time` and `pwyw` only. Defaults to `false`.",
        +              "example": false,
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "amount",
        +            "billingType"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "sku": {
        +        "anyOf": [
        +          {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "SKU of the product."
        +      },
        +      "stock": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Available stock of the product.",
        +        "example": 100
        +      },
        +      "taxBehavior": {
        +        "anyOf": [
        +          {
        +            "description": "Tax behavior for this product. Determines how taxes are calculated and displayed. Options include inclusive (tax included in price), exclusive (tax added on top of price), automatic (tax behavior determined by Stripe based on tax settings), or default (use default tax behavior).",
        +            "enum": [
        +              "inclusive",
        +              "exclusive",
        +              "automatic",
        +              ""
        +            ],
        +            "example": "exclusive",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "If Stripe Tax is enabled, determines the behaviour of Stripe Tax. Defaults to your Stripe Tax settings.",
        +        "example": ""
        +      },
        +      "taxCode": {
        +        "anyOf": [
        +          {
        +            "pattern": "^(txcd_[a-zA-Z0-9]+)?$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "If Stripe Tax is enabled, determines the tax code used when calculating tax. Defaults to your Stripe Tax settings."
        +      },
        +      "title": {
        +        "anyOf": [
        +          {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product title. Defaults to page name if not provided.",
        +        "example": "Premium Course"
        +      },
        +      "variants": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "properties": {
        +                "hidden": {
        +                  "description": "Whether this variant is hidden. Hidden variants can be shown or filled with data by query paramers. [Learn more](https://checkoutpage.com/docs/articles/preselect-checkout-variants). Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "increasesWithQuantity": {
        +                  "description": "Whether or not the variant quantity matches the checkout quantity. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "key": {
        +                  "description": "Optional caller-defined key for this variant. Not persisted to the database. Required when other variants reference this variant in `showHideLogic.element.elementId`. Bulk discounts with `variant_option_quantity` use option-level keys from `variants[].options[].key`.",
        +                  "example": "select-package-tier",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "layout": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "collapseVariantOptions": {
        +                          "description": "If enabled, variant options are collapsed by default. Defaults to `false`.",
        +                          "example": false,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "imageSize": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "small",
        +                                "medium",
        +                                "large",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Size of variant option images. Defaults to `small`.",
        +                          "example": "small"
        +                        },
        +                        "showPwywPlaceholder": {
        +                          "description": "Show placeholder text for Pay What You Want inputs. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantName": {
        +                          "description": "Show the variant name. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionNames": {
        +                          "description": "Show variant option names. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPriceSign": {
        +                          "description": "Show price sign (+ or -) for variant option prices. Defaults to `false`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "showVariantOptionPrices": {
        +                          "description": "Show variant option prices. Defaults to `true`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "spacing": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "comfortable",
        +                                "compact",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Spacing between variant options. Defaults to `comfortable`.",
        +                          "example": "comfortable"
        +                        },
        +                        "textAlign": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "left",
        +                                "center",
        +                                "stack",
        +                                ""
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Text alignment for variant options. Defaults to `left`.",
        +                          "example": "left"
        +                        },
        +                        "variantOptionColumns": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 10,
        +                              "minimum": 1,
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Number of columns for grid layout. Defaults to `2`.",
        +                          "example": 2
        +                        },
        +                        "variantOptionLayout": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "list",
        +                                "grid"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Layout style for variant options. Defaults to `list`.",
        +                          "example": "list"
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Layout configuration for this variant."
        +                },
        +                "manageVariantOptionStock": {
        +                  "description": "If enabled stock is managed by the variant options. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "description": "Name of the variant.",
        +                  "example": "Plan Type",
        +                  "type": "string"
        +                },
        +                "options": {
        +                  "description": "Options within this variant. Variant must have at least one option.",
        +                  "items": {
        +                    "properties": {
        +                      "additionalChargeAmount": {
        +                        "description": "The additional charge for selecting this variant option in cents.",
        +                        "example": 1000,
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "description": {
        +                        "description": "Description of the variant option. Supports HTML or plain text.",
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "discountedFromPrice": {
        +                        "anyOf": [
        +                          {
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "The original price of this variant option in cents.",
        +                        "example": 1500
        +                      },
        +                      "fileIds": {
        +                        "anyOf": [
        +                          {
        +                            "items": {
        +                              "pattern": "^[0-9a-fA-F]{24}$",
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Files specific to this variant option. Available to the customer after purchase."
        +                      },
        +                      "imageId": {
        +                        "anyOf": [
        +                          {
        +                            "pattern": "^[0-9a-fA-F]{24}$",
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ]
        +                      },
        +                      "key": {
        +                        "description": "Optional caller-defined key for this option. Not persisted to the database. Required when `preselect.optionId` on the same variant, `showHideLogic.value` on another variant, or a `discounts[].variantOptionIds[].key` entry needs to reference this option in the same request.",
        +                        "example": "pro-option",
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "name": {
        +                        "description": "Name of the variant option.",
        +                        "example": "Basic",
        +                        "type": "string"
        +                      },
        +                      "payWhatYouWant": {
        +                        "description": "If enabled, customers can choose their own price for this variant option. The minimum price is based on the additionalChargeAmount. This is only supported for `one_time` options. Defaults to `false`.",
        +                        "example": false,
        +                        "type": [
        +                          "boolean",
        +                          "null"
        +                        ]
        +                      },
        +                      "pwywSuggestedPrice": {
        +                        "anyOf": [
        +                          {
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Suggested price for Pay What You Want options in cents. This is a cosmetic field used to display a suggested amount to the customer. Defaults to `0`.",
        +                        "example": 2500
        +                      },
        +                      "sku": {
        +                        "description": "SKU for this option.",
        +                        "type": [
        +                          "string",
        +                          "null"
        +                        ]
        +                      },
        +                      "status": {
        +                        "anyOf": [
        +                          {
        +                            "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                            "enum": [
        +                              "enabled",
        +                              "disabled",
        +                              "deleted"
        +                            ],
        +                            "example": "enabled",
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Status of the variant option. Defaults to `enabled`.",
        +                        "example": "enabled"
        +                      },
        +                      "stock": {
        +                        "description": "Stock quantity for this option.",
        +                        "example": 10,
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "type": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "one_time",
        +                              "recurring"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "Type of variant option - one-time purchase or recurring subscription. For Pay What You Want options, `type` must be `one_time` and set `payWhatYouWant: true`.",
        +                        "example": "one_time"
        +                      }
        +                    },
        +                    "required": [
        +                      "name"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "minItems": 1,
        +                  "type": "array"
        +                },
        +                "order": {
        +                  "description": "Display order of the variant. Defaults to `0`.",
        +                  "example": 0,
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "preselect": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "enabled": {
        +                          "description": "Enable preselecting a variant option. Defaults to `false`.",
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "optionId": {
        +                          "description": "The `key` of the variant option to preselect. Must match the `key` of an option on this variant.",
        +                          "example": "pro-option",
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "quantity": {
        +                          "description": "Quantity to preselect for quantity selection type variants. Defaults to `1` for `single` and `multiple` selection types.",
        +                          "example": 2,
        +                          "type": [
        +                            "number",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Preselect configuration for this variant.",
        +                  "example": {
        +                    "enabled": true,
        +                    "optionId": "pro-option",
        +                    "quantity": 1
        +                  }
        +                },
        +                "priceIds": {
        +                  "anyOf": [
        +                    {
        +                      "items": {
        +                        "pattern": "^[0-9a-fA-F]{24}$",
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Price IDs this variant group is scoped to. Required when the product has multiple prices configured via `prices[]`. Customers will only see this variant group when the scoped price is selected.",
        +                  "example": [
        +                    "507f1f77bcf86cd799439011"
        +                  ]
        +                },
        +                "reference": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 36,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "External reference ID. Generated from the variant name when omitted.",
        +                  "example": "fd3136f8-da1f-4a4c-b381-32a097b60c38"
        +                },
        +                "required": {
        +                  "description": "Whether the customer must select at least one option in the variant.",
        +                  "example": true,
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                },
        +                "selectionType": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Selection type for product variants, indicating how customers can select variant options in a variant. Options include single (only one option can be selected), multiple (multiple options can be selected), or quantity (customer can specify quantity for each option).",
        +                      "enum": [
        +                        "single",
        +                        "multiple",
        +                        "quantity"
        +                      ],
        +                      "example": "single",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Type of selection. If `single` the customer can choose one option in the variant group. If `multiple` the customer can choose multiple options in the variant group. If `quantity` the customer can select multiple options and set a quantity of each variant in the variant group. Defaults to `single`",
        +                  "example": "single"
        +                },
        +                "showHideLogic": {
        +                  "anyOf": [
        +                    {
        +                      "properties": {
        +                        "comparison": {
        +                          "anyOf": [
        +                            {
        +                              "enum": [
        +                                "is",
        +                                "is_not",
        +                                "is_empty",
        +                                "is_not_empty",
        +                                "contains"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Comparison operator for the condition. Defaults to `is`. Use `value` with `is`, `is_not`, and `contains`. Omit `value` for `is_empty` and `is_not_empty`.",
        +                          "example": "is"
        +                        },
        +                        "element": {
        +                          "anyOf": [
        +                            {
        +                              "properties": {
        +                                "elementId": {
        +                                  "description": "The `key` of the source variant used in the condition. Must match the `key` of another variant in the same batch.",
        +                                  "example": "select-package-tier",
        +                                  "type": [
        +                                    "string",
        +                                    "null"
        +                                  ]
        +                                }
        +                              },
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Element (variant) to compare against."
        +                        },
        +                        "enabled": {
        +                          "description": "Enable conditional show/hide logic. Defaults to `false`.",
        +                          "example": true,
        +                          "type": [
        +                            "boolean",
        +                            "null"
        +                          ]
        +                        },
        +                        "value": {
        +                          "description": "The `key` of the variant option being referenced. Must match the `key` of an option on the source variant identified by `showHideLogic.element.elementId`. Use this with `is`, `is_not`, and `contains`. Omit this field for `is_empty` and `is_not_empty`.",
        +                          "example": "pro-option",
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Conditional logic to show or hide this variant based on other form elements."
        +                },
        +                "status": {
        +                  "anyOf": [
        +                    {
        +                      "description": "Status of a product variant, indicating whether it is enabled, disabled, or deleted.",
        +                      "enum": [
        +                        "enabled",
        +                        "disabled",
        +                        "deleted"
        +                      ],
        +                      "example": "enabled",
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Status of the variant. Defaults to `enabled`",
        +                  "example": "enabled"
        +                },
        +                "useVariantOptionSkus": {
        +                  "description": "If enabled, use SKUs from variant options instead of the product SKU. Defaults to `false`.",
        +                  "type": [
        +                    "boolean",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "name",
        +                "options"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Product variants and options. To link a discount to specific variant options, assign a `key` to each relevant option here and reference those keys in `discounts[].variantOptionIds[].key` within the same request."
        +      },
        +      "variantsRequired": {
        +        "description": "Use 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`.",
        +        "example": false,
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_product2 fields changed
      • changedInput schema / properties / price / properties / paymentPlan / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "billingCycleAnchorConfig": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "dayOfMonth": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 31,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                "example": 1
        -              },
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "month": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 12,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "interval": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Billing interval for subscriptions.",
        -        "example": "month"
        -      },
        -      "intervalCount": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Number of intervals between billings.",
        -        "example": 1
        -      },
        -      "planIterations": {
        -        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -        "example": 3,
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date on which the subscription begins.",
        -        "example": "2026-02-25T06:40:09.463Z"
        -      },
        -      "trialPeriodDays": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Trial period in days for subscriptions."
        -      }
        -    },
        -    "required": [
        -      "planIterations"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "billingCycleAnchorConfig": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "dayOfMonth": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 31,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                "example": 1
        +              },
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "month": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 12,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "interval": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Billing interval for subscriptions.",
        +        "example": "month"
        +      },
        +      "intervalCount": {
        +        "anyOf": [
        +          {
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Number of intervals between billings.",
        +        "example": 1
        +      },
        +      "planIterations": {
        +        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +        "example": 3,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date on which the subscription begins.",
        +        "example": "2026-02-25T06:40:09.463Z"
        +      },
        +      "trialPeriodDays": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Trial period in days for subscriptions."
        +      }
        +    },
        +    "required": [
        +      "planIterations"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / price / properties / recurring / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "billingCycleAnchorConfig": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "dayOfMonth": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 31,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                "example": 1
        -              },
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "month": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 12,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "interval": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Billing interval for subscriptions.",
        -        "example": "month"
        -      },
        -      "intervalCount": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Number of intervals between billings.",
        -        "example": 1
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date on which the subscription begins.",
        -        "example": "2026-02-25T06:40:09.463Z"
        -      },
        -      "trialPeriodDays": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Trial period in days for subscriptions."
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "billingCycleAnchorConfig": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "dayOfMonth": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 31,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                "example": 1
        +              },
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "month": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 12,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "interval": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Billing interval for subscriptions.",
        +        "example": "month"
        +      },
        +      "intervalCount": {
        +        "anyOf": [
        +          {
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Number of intervals between billings.",
        +        "example": 1
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date on which the subscription begins.",
        +        "example": "2026-02-25T06:40:09.463Z"
        +      },
        +      "trialPeriodDays": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Trial period in days for subscriptions."
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedupdate_product4 fields changed
      • changedInput schema / properties / price / properties / paymentPlan / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "billingCycleAnchorConfig": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "dayOfMonth": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 31,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                "example": 1
        -              },
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "month": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 12,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "interval": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Billing interval for subscriptions.",
        -        "example": "month"
        -      },
        -      "intervalCount": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Number of intervals between billings.",
        -        "example": 1
        -      },
        -      "planIterations": {
        -        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -        "example": 3,
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date on which the subscription begins.",
        -        "example": "2026-02-25T06:40:09.463Z"
        -      },
        -      "trialPeriodDays": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Trial period in days for subscriptions."
        -      }
        -    },
        -    "required": [
        -      "planIterations"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "billingCycleAnchorConfig": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "dayOfMonth": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 31,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                "example": 1
        +              },
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "month": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 12,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "interval": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Billing interval for subscriptions.",
        +        "example": "month"
        +      },
        +      "intervalCount": {
        +        "anyOf": [
        +          {
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Number of intervals between billings.",
        +        "example": 1
        +      },
        +      "planIterations": {
        +        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +        "example": 3,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date on which the subscription begins.",
        +        "example": "2026-02-25T06:40:09.463Z"
        +      },
        +      "trialPeriodDays": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Trial period in days for subscriptions."
        +      }
        +    },
        +    "required": [
        +      "planIterations"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / price / properties / recurring / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "billingCycleAnchorConfig": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "dayOfMonth": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 31,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                "example": 1
        -              },
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "month": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 12,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "interval": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Billing interval for subscriptions.",
        -        "example": "month"
        -      },
        -      "intervalCount": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Number of intervals between billings.",
        -        "example": 1
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date on which the subscription begins.",
        -        "example": "2026-02-25T06:40:09.463Z"
        -      },
        -      "trialPeriodDays": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Trial period in days for subscriptions."
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "billingCycleAnchorConfig": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "dayOfMonth": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 31,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                "example": 1
        +              },
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "month": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 12,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "interval": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Billing interval for subscriptions.",
        +        "example": "month"
        +      },
        +      "intervalCount": {
        +        "anyOf": [
        +          {
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Number of intervals between billings.",
        +        "example": 1
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date on which the subscription begins.",
        +        "example": "2026-02-25T06:40:09.463Z"
        +      },
        +      "trialPeriodDays": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Trial period in days for subscriptions."
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / prices / items / properties / paymentPlan / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "billingCycleAnchorConfig": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "dayOfMonth": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 31,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                "example": 1
        -              },
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "month": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 12,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "interval": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Billing interval for subscriptions.",
        -        "example": "month"
        -      },
        -      "intervalCount": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Number of intervals between billings.",
        -        "example": 1
        -      },
        -      "planIterations": {
        -        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        -        "example": 3,
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date on which the subscription begins.",
        -        "example": "2026-02-25T06:40:09.463Z"
        -      },
        -      "trialPeriodDays": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Trial period in days for subscriptions."
        -      }
        -    },
        -    "required": [
        -      "planIterations"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "billingCycleAnchorConfig": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "dayOfMonth": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 31,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                "example": 1
        +              },
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "month": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 12,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "interval": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Billing interval for subscriptions.",
        +        "example": "month"
        +      },
        +      "intervalCount": {
        +        "anyOf": [
        +          {
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Number of intervals between billings.",
        +        "example": 1
        +      },
        +      "planIterations": {
        +        "description": "The number of times a subscription renews. After set number of renewals the payment plan is complete.",
        +        "example": 3,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date on which the subscription begins.",
        +        "example": "2026-02-25T06:40:09.463Z"
        +      },
        +      "trialPeriodDays": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Trial period in days for subscriptions."
        +      }
        +    },
        +    "required": [
        +      "planIterations"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / prices / items / properties / recurring / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "billingCycleAnchorConfig": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "dayOfMonth": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 31,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The first billing period will be prorated based on the remaining days in the month. Defaults to `1`.",
        -                "example": 1
        -              },
        -              "enabled": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "month": {
        -                "anyOf": [
        -                  {
        -                    "maximum": 12,
        -                    "minimum": 1,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "interval": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Billing interval for subscriptions.",
        -        "example": "month"
        -      },
        -      "intervalCount": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Number of intervals between billings.",
        -        "example": 1
        -      },
        -      "startDate": {
        -        "anyOf": [
        -          {
        -            "format": "date-time",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "The date on which the subscription begins.",
        -        "example": "2026-02-25T06:40:09.463Z"
        -      },
        -      "trialPeriodDays": {
        -        "anyOf": [
        -          {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Trial period in days for subscriptions."
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "billingCycleAnchorConfig": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "dayOfMonth": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 31,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Day of the month subscriptions renew on. Renewals happen at 00:00 UTC. Customers who subscribe between renewal days pay a prorated amount for their first period. Customers who subscribe in the first 24 hours of the renewal day (00:00 to 24:00 UTC) are backdated to 00:00 and pay the full price. The full-price rule applies to subscriptions billed every month or every year, not payment plans. Defaults to `1`.",
        +                "example": 1
        +              },
        +              "enabled": {
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "month": {
        +                "anyOf": [
        +                  {
        +                    "maximum": 12,
        +                    "minimum": 1,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "interval": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Billing interval for subscriptions.",
        +        "example": "month"
        +      },
        +      "intervalCount": {
        +        "anyOf": [
        +          {
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Number of intervals between billings.",
        +        "example": 1
        +      },
        +      "startDate": {
        +        "anyOf": [
        +          {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "The date on which the subscription begins.",
        +        "example": "2026-02-25T06:40:09.463Z"
        +      },
        +      "trialPeriodDays": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Trial period in days for subscriptions."
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  19. 14 tool updates
    • Changedcreate_checkout_page2 fields changed
      • addedInput schema / $defs / FieldInput / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedcreate_event2 fields changed
      • addedInput schema / $defs / FieldInput / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedcreate_field2 fields changed
      • addedInput schema / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedcreate_form2 fields changed
      • addedInput schema / $defs / FieldInput / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedget_checkout_page1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedget_event1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedget_form1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedlist_checkout_pages1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedlist_events1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedlist_forms1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedupdate_checkout_page1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedupdate_event1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedupdate_field2 fields changed
      • addedInput schema / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely: it is not rendered, cannot be revealed with `show_fields`, is not prefilled and is never submitted.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedupdate_form1 field changed
      • addedOutput schema / $defs / Field / properties / disabled
        Added value: +{
        +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
        +  "example": false,
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}

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

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 95 read/write tools for managing digital product sales, including transactions, subscriptions, products and offers, contacts, affiliations, coupons, e-tickets, and webhooks, for use with any MCP client over HTTP.
    MIT
  • 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
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources