Skip to main content
Glama

list_payments

Read-only

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.

Input Schema

NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
pageIdNoFilter payments by page ID.
searchNoSearch payments by customerEmail, customerName, productTitle, or orderId. Contains match.
statusNoPayment status filter. Valid values: created, pending, unpaid, partially_paid, paid, canceled, failed, partial_refund, refunded, draft, draft_expired.
orderIdNoFilter by exact order ID.
livemodeNoSet to false to read test-mode records (created while a page was in test mode). Defaults to live records.
productIdNoFilter payments by product ID.
couponCodeNoFilter payments where a specific coupon code was used (e.g. 'SUMMER20').
customerIdNoFilter payments by customer ID.
orderStatusNoOrder lifecycle status filter. Valid values: 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

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
    • 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"
      +  ]
      +}
  2. Changed2 schema 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"
      +}
  3. Changed4 schema 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."
  4. 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."
      +}
  5. 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`."
      +}
  6. 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"
      +  }
      +]
  7. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources