Skip to main content
Glama

Review payment for this existing booking

get_booking_payment_review
Read-onlyIdempotent

Use this when retrieving the existing unpaid checkout for the OAuth-selected guest booking. Do not use for payment flags (use get_booking_status instead); submission recovery uses get_offer_status. The selection, original intake proof and separate payment-review consent must identify the same booking. A bookingKey cannot supply consent; linked-customer and status-only grants are ineligible. prepared returns the private checkout for customer confirmation/payment. Paid or closed states have no link; ambiguous, conflict, expired or unavailable require review, never a replacement offer. Access is checked before and after retrieval, without creating a checkout, charging, messaging or refreshing the payment provider.

Input Schema

NameRequiredDescriptionDefault
bookingKeyNoOmit to use exactly the booking already selected by this OAuth connection. If supplied, use that same booking's ID or visible reference; another identifier cannot switch selection or grant access.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / bookingKey / description
      Previous value: -"Internal booking ID for the one selected booking. At the customer OAuth endpoint, its visible bookingReference is accepted too. Copy the same booking's bookingKey or bookingReference from an available get_offer_status/prepare_offer or authorized booking-read result. prepared returns links, not these IDs. The supplier offerKey is not a booking identifier; the identifier grants no access by itself."New value: +"Omit to use exactly the booking already selected by this OAuth connection. If supplied, use that same booking's ID or visible reference; another identifier cannot switch selection or grant access."
    • removedInput schema / required
      Removed value: -[
      -  "bookingKey"
      -]
  2. Changed2 schema fields changed
    • changedInput schema / properties / bookingKey / description
      Previous value: -"Internal booking ID for the one selected booking. At the customer OAuth endpoint, its visible bookingReference is accepted too. Use a value returned for that same booking; the identifier grants no access by itself."New value: +"Internal booking ID for the one selected booking. At the customer OAuth endpoint, its visible bookingReference is accepted too. Copy the same booking's bookingKey or bookingReference from an available get_offer_status/prepare_offer or authorized booking-read result. prepared returns links, not these IDs. The supplier offerKey is not a booking identifier; the identifier grants no access by itself."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "status": {
      -        "enum": [
      -          "invalid_request",
      -          "not_found",
      -          "unavailable",
      -          "ambiguous",
      -          "conflict",
      -          "expired"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "status"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "bookingChanged": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "nextAction": {
      -        "type": "string"
      -      },
      -      "payment": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "recordedStatus": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "recordedStatus"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "const": "available",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "status",
      -      "payment",
      -      "bookingChanged",
      -      "nextAction"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "bookingConfirmed": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "checkoutUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "nextAction": {
      -        "type": "string"
      -      },
      -      "offer": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "completeTermsBound": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "currency": {
      -            "const": "EUR",
      -            "type": "string"
      -          },
      -          "customerConfirmationRequired": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "expiresAt": {
      -            "type": "string"
      -          },
      -          "grossTotalCents": {
      -            "maximum": 9007199254740991,
      -            "minimum": 0,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "currency",
      -          "grossTotalCents",
      -          "expiresAt",
      -          "customerConfirmationRequired",
      -          "completeTermsBound"
      -        ],
      -        "type": "object"
      -      },
      -      "status": {
      -        "const": "prepared",
      -        "type": "string"
      -      },
      -      "termsUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "status",
      -      "bookingConfirmed",
      -      "checkoutUrl",
      -      "termsUrl",
      -      "offer",
      -      "nextAction"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "status": {
      +        "description": "Review failure: invalid_request rejects input; not_found denies current object/proof access; unavailable cannot safely supply the review; ambiguous means evidence is incomplete or non-unique; conflict means stored offer facts disagree; expired means the bound offer has expired.",
      +        "enum": [
      +          "invalid_request",
      +          "not_found",
      +          "unavailable",
      +          "ambiguous",
      +          "conflict",
      +          "expired"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "bookingChanged": {
      +        "const": false,
      +        "description": "This read did not change the booking.",
      +        "type": "boolean"
      +      },
      +      "nextAction": {
      +        "description": "Read-only guidance for the returned recorded state; do not start another payment.",
      +        "type": "string"
      +      },
      +      "payment": {
      +        "additionalProperties": false,
      +        "description": "The selected booking's recorded payment state.",
      +        "properties": {
      +          "recordedStatus": {
      +            "description": "Stored reservation payment status; no new payment-provider confirmation.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "recordedStatus"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "const": "available",
      +        "description": "Recorded payment state is returned without another payment link for an already-paid, refunded or closed booking.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "status",
      +      "payment",
      +      "bookingChanged",
      +      "nextAction"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "bookingConfirmed": {
      +        "const": false,
      +        "description": "Returning the existing review link does not confirm the booking.",
      +        "type": "boolean"
      +      },
      +      "checkoutUrl": {
      +        "description": "Existing private offer-review page; open it to review terms and explicitly confirm and pay through the existing flow. Treat the link as private.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "nextAction": {
      +        "description": "Guidance to open the existing review page and review the bound offer; this read performs no payment.",
      +        "type": "string"
      +      },
      +      "offer": {
      +        "additionalProperties": false,
      +        "description": "Existing offer amount, expiry and confirmation/terms requirements.",
      +        "properties": {
      +          "completeTermsBound": {
      +            "const": true,
      +            "description": "Complete service and legal terms were verified as bound to this offer.",
      +            "type": "boolean"
      +          },
      +          "currency": {
      +            "const": "EUR",
      +            "description": "Currency of the existing bound offer amount: EUR.",
      +            "type": "string"
      +          },
      +          "customerConfirmationRequired": {
      +            "const": true,
      +            "description": "The customer must explicitly review and confirm the offer on its existing page.",
      +            "type": "boolean"
      +          },
      +          "expiresAt": {
      +            "description": "Stored offer expiry timestamp from offer_expires_at. It is separate from the submission resume-token expiry; an expired offer cannot be confirmed.",
      +            "type": "string"
      +          },
      +          "grossTotalCents": {
      +            "description": "Verified gross total of the existing offer in EUR cents, including applicable tax.",
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "currency",
      +          "grossTotalCents",
      +          "expiresAt",
      +          "customerConfirmationRequired",
      +          "completeTermsBound"
      +        ],
      +        "type": "object"
      +      },
      +      "status": {
      +        "const": "prepared",
      +        "description": "The existing unpaid offer and bound review link were verified for review; no new Checkout Session or payment was created.",
      +        "type": "string"
      +      },
      +      "termsUrl": {
      +        "description": "The same existing offer page containing the complete bound terms to review before confirmation.",
      +        "format": "uri",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "status",
      +      "bookingConfirmed",
      +      "checkoutUrl",
      +      "termsUrl",
      +      "offer",
      +      "nextAction"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / bookingKey / description
      Added value: +"Internal booking ID for the one selected booking. At the customer OAuth endpoint, its visible bookingReference is accepted too. Use a value returned for that same booking; the identifier grants no access by itself."
  4. Added

TDQS

A4.8/5.0
Behavior5/5

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

With annotations already declaring readOnly, idempotent, non-destructive, and non-open-world behavior, the description adds substantial context: access is checked before and after retrieval, no checkout is created, no charge is made, no message is sent, and the payment provider is not refreshed. It also maps outcome states to actions, including that paid or closed states have no link and ambiguous/conflict/expired/unavailable states require review rather than a replacement offer.

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 with the use case and alternatives, and every sentence carries a routing, eligibility, or behavioral constraint. It is dense and somewhat run-on, but not padded; a slight trim would improve scanability without losing substance.

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 full annotations, the description supplies everything an agent needs for correct invocation: eligibility rules, access-control constraints, state-specific outcomes, and explicit side-effect guarantees. Nothing material is missing for this single-parameter read 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 baseline is 3. The description still adds meaningful semantics beyond the schema by stating that a bookingKey cannot supply consent and that another identifier cannot switch selection or grant access, which reinforces the access-control constraint on the 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 description states a specific verb and resource: retrieving the existing unpaid checkout for the OAuth-selected guest booking. It explicitly distinguishes itself from get_booking_status for payment flags and get_offer_status for submission recovery, so an agent can route correctly without opening sibling 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?

It gives explicit when-to-use conditions, names two sibling alternatives with their distinct purposes, and lists eligibility exclusions: selection, intake proof, and payment-review consent must identify the same booking; bookingKey cannot supply consent; linked-customer and status-only grants are ineligible. This is close to a complete routing specification.

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