Skip to main content
Glama

list_bookings

Read-only

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.

Input Schema

NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter by event ID.
searchNoSearch by customerEmail, customerName, eventTitle, or orderId. Contains match (e.g. 'jane' matches 'jane@example.com', 'Doe' matches 'Jane Doe', 'Summit' matches 'Future of AI Summit 2026').
statusNoFilter by payment status. Valid values: created, pending, unpaid, partially_paid, paid, canceled, failed, partial_refund, refunded, draft, draft_expired.
orderIdNoFilter by order ID.
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

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema 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"
      -}
  2. Changed2 schema 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"
      +}
  3. Changed2 schema 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"
      +  ]
      +}
  4. Changed3 schema 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"
      +}
  5. Changed4 schema 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."
  6. Changed1 schema 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."
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / data / items / properties / processingFeeContribution
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "amount": {
      +          "description": "Contribution in the smallest currency unit.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "fixedAmount": {
      +          "description": "The fixed part.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "name": {
      +          "description": "Name shown on the receipt, frozen at payment.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "percentage": {
      +          "description": "Percentage used for the contribution.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "percentageAmount": {
      +          "description": "The part from the percentage.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What the customer chose to add to cover the processing fee, worked out on the total with tax. Not one of `fees`."
      +}
  8. Changed1 schema field changed
    • changedOutput schema / properties / data / items / properties / fees / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "amount": {
      -          "description": "Fee amount in the smallest currency unit.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "name": {
      -          "description": "Fee name.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "percentage": {
      -          "description": "Fee percentage when applicable.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "amount": {
      +          "description": "Fee amount in the smallest currency unit. For a fee with both a percentage and a fixed amount, the sum of `percentageAmount` and `fixedAmount`.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "fixedAmount": {
      +          "description": "The fixed part of `amount`, in the smallest currency unit, already multiplied by quantity or tickets when the fee multiplies. Only set on a fee with both a percentage and a fixed amount.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "name": {
      +          "description": "Fee name.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "percentage": {
      +          "description": "Fee percentage when applicable.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "percentageAmount": {
      +          "description": "The part of `amount` from the percentage, in the smallest currency unit. Only set on a fee with both a percentage and a fixed amount. Can be 0, e.g. when a 100% coupon leaves nothing for the percentage to apply to.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  9. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources