Skip to main content
Glama

Cancel order

cancel_order
DestructiveIdempotent

Cancel a paid order under its terms, or close an unpaid one. Paid (cancel.reason cancellable): only after the user confirmed the order's cancel.penalty and cancel.refund with a clear yes, pass maximumPenalty, that cancel.penalty exactly as returned. The order becomes cancelling, then cancelled with cancel.refund refunded, or confirmed with reason refused if the hotel refuses: poll get_order. cancellation_changed: the penalty rose above maximumPenalty and nothing changed; ask the user again. Never state a refund the order did not return. Unpaid (cancel.reason unpaid): close it, without maximumPenalty, only once the user says they no longer want it; nothing is charged and it becomes expired. If it was paid meanwhile, the answer is the paid order, invalid_request, order_not_cancellable or order_in_progress: cancel it only under its cancel.penalty, with the user's yes. payment_in_progress: read it again shortly. Repeat calls answer the order as it is.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "orderId": "<orderId>"
    },
    "name": "cancel_order"
  }
}

Input Schema

NameRequiredDescriptionDefault
orderIdYesThe orderId of the order to cancel.
maximumPenaltyNoThe penalty the user agreed to: the order's cancel.penalty, exactly as returned. Ignored when closing an unpaid order.

Output Schema

NameRequiredDescriptionDefault
itemsYes
priceYes
cancelYesWhether the order can be cancelled now, and for what penalty and refund.
statusYesawaiting_payment: not paid yet (a payment just made may still be settling); payable until payment.expiresAt. expired: not paid; the time ran out or the order was closed. Nothing charged. confirming: paid or held, the booking is with the hotel. confirmed: the hotel confirmed and the payment is charged. failed: no stay was booked; payment.status says what became of the money. cancelling, then cancelled: a cancellation under the terms. needs_attention: a person at Fortrip has to resolve it.
orderIdYes
paymentYes
createdAtYes
manageUrlYes
referenceYes
updatedAtYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedOutput schema / properties / payment / properties / localCurrencyAtCheckout / description
      Previous value: -"Whether paying by url may charge the card in its own currency, converted by Stripe; false once paid by token, Alipay or WeChat Pay; always false on a CNY order."New value: +"Whether paying by url may charge the card in its own currency, converted by Stripe; false once paid by token, or by Alipay or WeChat Pay through pay_order or the Fortrip page; always false on a CNY order."
    • changedOutput schema / properties / payment / properties / methods / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "description": "A Stripe shared payment token, through pay_order's sharedPaymentToken or payment. The entry is absent when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, an Alipay or WeChat Pay payment is open, or token payment isn't offered for this order.",
      -    "properties": {
      -      "handler": {
      -        "additionalProperties": {},
      -        "description": "The com.stripe.payments handler, which takes the token.",
      -        "properties": {
      -          "available_instruments": {
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "config": {
      -                  "additionalProperties": {},
      -                  "propertyNames": {
      -                    "type": "string"
      -                  },
      -                  "type": "object"
      -                },
      -                "type": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "type"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "config": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "business_profile": {
      -                "type": "string"
      -              },
      -              "environment": {
      -                "anyOf": [
      -                  {
      -                    "enum": [
      -                      "livemode",
      -                      "testmode"
      -                    ],
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "string"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "environment",
      -              "business_profile"
      -            ],
      -            "type": "object"
      -          },
      -          "id": {
      -            "type": "string"
      -          },
      -          "schema": {
      -            "type": "string"
      -          },
      -          "spec": {
      -            "type": "string"
      -          },
      -          "type": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "type",
      -          "version",
      -          "spec",
      -          "schema",
      -          "available_instruments",
      -          "config"
      -        ],
      -        "type": "object"
      -      },
      -      "id": {
      -        "const": "stripe_shared_payment_token",
      -        "type": "string"
      -      },
      -      "limits": {
      -        "additionalProperties": {},
      -        "description": "What the shared payment token for pay_order must allow.",
      -        "properties": {
      -          "currency": {
      -            "description": "The token's currency, lowercase as Stripe takes it: usd.",
      -            "type": "string"
      -          },
      -          "expiresAt": {
      -            "description": "Request the token valid until at least this time; the order can't be paid after it.",
      -            "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -            "type": "string"
      -          },
      -          "maxAmount": {
      -            "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "maxAmount",
      -          "currency",
      -          "expiresAt"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "handler",
      -      "limits"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "description": "Paying with Alipay or WeChat Pay: pass method stripe_alipay_wechat_pay to pay_order to open it. The entry is absent when the order can't be paid this way and none is open, as on a CNY order.",
      -    "properties": {
      -      "alipay": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {},
      -            "properties": {
      -              "url": {
      -                "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "url"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The Alipay link; null until the payment is open."
      -      },
      -      "current": {
      -        "anyOf": [
      -          {
      -            "anyOf": [
      -              {
      -                "enum": [
      -                  "wechat_pay",
      -                  "alipay"
      -                ],
      -                "type": "string"
      -              },
      -              {
      -                "type": "string"
      -              }
      -            ]
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Which of the two the payment is on now; null until it is open."
      -      },
      -      "id": {
      -        "const": "stripe_alipay_wechat_pay",
      -        "type": "string"
      -      },
      -      "open": {
      -        "description": "Whether pay_order has opened an Alipay or WeChat Pay payment on this order.",
      -        "type": "boolean"
      -      },
      -      "wechatPay": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {},
      -            "properties": {
      -              "qrData": {
      -                "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "qrImageUrl": {
      -                "description": "A 480 px PNG of the same code.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "url": {
      -                "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "qrData",
      -              "qrImageUrl",
      -              "url"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The WeChat Pay code and link; null until the payment is open."
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "open",
      -      "current",
      -      "wechatPay",
      -      "alipay"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "description": "A Stripe shared payment token, through pay_order's sharedPaymentToken or payment. The entry is absent when a token can't pay this order (for example over $500, not charged in USD, or started on the Fortrip website); then give payment.url or use another entry.",
      +    "properties": {
      +      "handler": {
      +        "additionalProperties": {},
      +        "description": "The com.stripe.payments handler, which takes the token.",
      +        "properties": {
      +          "available_instruments": {
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "config": {
      +                  "additionalProperties": {},
      +                  "propertyNames": {
      +                    "type": "string"
      +                  },
      +                  "type": "object"
      +                },
      +                "type": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "type"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "config": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "business_profile": {
      +                "type": "string"
      +              },
      +              "environment": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "livemode",
      +                      "testmode"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "environment",
      +              "business_profile"
      +            ],
      +            "type": "object"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "schema": {
      +            "type": "string"
      +          },
      +          "spec": {
      +            "type": "string"
      +          },
      +          "type": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "type",
      +          "version",
      +          "spec",
      +          "schema",
      +          "available_instruments",
      +          "config"
      +        ],
      +        "type": "object"
      +      },
      +      "id": {
      +        "const": "stripe_shared_payment_token",
      +        "type": "string"
      +      },
      +      "limits": {
      +        "additionalProperties": {},
      +        "description": "What the shared payment token for pay_order must allow.",
      +        "properties": {
      +          "currency": {
      +            "description": "The token's currency, lowercase as Stripe takes it: usd.",
      +            "type": "string"
      +          },
      +          "expiresAt": {
      +            "description": "Request the token valid until at least this time; the order can't be paid after it.",
      +            "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +            "type": "string"
      +          },
      +          "maxAmount": {
      +            "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "maxAmount",
      +          "currency",
      +          "expiresAt"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "handler",
      +      "limits"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "description": "Paying with Alipay or WeChat Pay: pass method stripe_alipay_wechat_pay to pay_order to open it. The entry is absent when the order can't be paid this way and none is open, as on a CNY order.",
      +    "properties": {
      +      "alipay": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "url": {
      +                "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "url"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The Alipay link; null until the payment is open."
      +      },
      +      "current": {
      +        "anyOf": [
      +          {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "wechat_pay",
      +                  "alipay"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "string"
      +              }
      +            ]
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Which of the two the payment is on now; null until it is open."
      +      },
      +      "id": {
      +        "const": "stripe_alipay_wechat_pay",
      +        "type": "string"
      +      },
      +      "open": {
      +        "description": "Whether pay_order has opened an Alipay or WeChat Pay payment on this order.",
      +        "type": "boolean"
      +      },
      +      "wechatPay": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "qrData": {
      +                "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "qrImageUrl": {
      +                "description": "A 480 px PNG of the same code.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "url": {
      +                "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "qrData",
      +              "qrImageUrl",
      +              "url"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The WeChat Pay code and link; null until the payment is open."
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "open",
      +      "current",
      +      "wechatPay",
      +      "alipay"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedOutput schema / properties / payment / properties / url / description
      Previous value: -"The payment page, on fortrip.ai; it continues to the payment provider. With requiresSignIn false anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null while a payment is held (authorized) or when the order isn't awaiting payment, or, while it is and its payment is unpaid, when the link couldn't be read this time: read the order again."New value: +"The payment page, on fortrip.ai; it continues to the payment provider. With requiresSignIn false anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null while a payment is held (authorized) or when the order isn't awaiting payment, or, while it is and its payment is unpaid, while a payment is being processed: read the order again shortly, and don't give an earlier link."
    • changedOutput schema / properties / status / description
      Previous value: -"awaiting_payment: unpaid, nothing charged; payable until payment.expiresAt. expired: not paid; the time ran out or the order was closed. Nothing charged. confirming: paid or held, the booking is with the hotel. confirmed: the hotel confirmed and the payment is charged. failed: no stay was booked; payment.status says what became of the money. cancelling, then cancelled: a cancellation under the terms. needs_attention: a person at Fortrip has to resolve it."New value: +"awaiting_payment: not paid yet (a payment just made may still be settling); payable until payment.expiresAt. expired: not paid; the time ran out or the order was closed. Nothing charged. confirming: paid or held, the booking is with the hotel. confirmed: the hotel confirmed and the payment is charged. failed: no stay was booked; payment.status says what became of the money. cancelling, then cancelled: a cancellation under the terms. needs_attention: a person at Fortrip has to resolve it."
  2. Changed24 schema fields changed
    • addedInput schema / properties / maximumPenalty / additionalProperties
      Added value: +{}
    • changedInput schema / properties / maximumPenalty / description
      Previous value: -"The penalty the user agreed to, in the order's currency. Pass maximumPenalty as the number in cancel.penalty.amount (\"120.00\" → 120)."New value: +"The penalty the user agreed to: the order's cancel.penalty, exactly as returned. Ignored when closing an unpaid order."
    • removedInput schema / properties / maximumPenalty / minimum
      Removed value: -0
    • addedInput schema / properties / maximumPenalty / properties
      Added value: +{
      +  "amount": {
      +    "description": "Decimal string such as 132.40, never a number.",
      +    "pattern": "^\\d+(\\.\\d+)?$",
      +    "type": "string"
      +  },
      +  "currency": {
      +    "description": "3-letter uppercase ISO 4217 code, as returned.",
      +    "pattern": "^[A-Z]{3}$",
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / maximumPenalty / required
      Added value: +[
      +  "amount",
      +  "currency"
      +]
    • changedInput schema / properties / maximumPenalty / type
      Previous value: -"number"New value: +"object"
    • changedInput schema / required
      Previous value: -[
      -  "orderId",
      -  "maximumPenalty"
      -]New value: +[
      +  "orderId"
      +]
    • changedOutput schema / properties / cancel / properties / available / description
      Previous value: -"Whether the user can cancel the order now."New value: +"Whether the user can cancel the order now, or, unpaid (reason unpaid), close it."
    • changedOutput schema / properties / cancel / properties / penalty / description
      Previous value: -"The penalty if cancelled now, under the accepted terms, in the charge currency; null when not stated."New value: +"The penalty if cancelled now, under the accepted terms, in the charge currency; null when not stated, except on an unpaid order (reason unpaid), where null means closing it charges nothing."
    • changedOutput schema / properties / cancel / properties / reason / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "cancellable",
      -      "already_cancelled",
      -      "in_progress",
      -      "not_confirmed",
      -      "stay_started",
      -      "non_refundable",
      -      "refused",
      -      "terms_unknown",
      -      "needs_attention"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "cancellable",
      +      "unpaid",
      +      "already_cancelled",
      +      "in_progress",
      +      "not_confirmed",
      +      "stay_started",
      +      "non_refundable",
      +      "refused",
      +      "terms_unknown",
      +      "needs_attention"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • changedOutput schema / properties / cancel / properties / reason / description
      Previous value: -"cancellable when it can be cancelled now; otherwise why not."New value: +"cancellable: a paid order can be cancelled now; unpaid: an unpaid order can be closed; otherwise why not."
    • changedOutput schema / properties / items / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "hotel": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "cancellation": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "asOf": {
      -                "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -                "type": "string"
      -              },
      -              "freeCancellationEndsAt": {
      -                "anyOf": [
      -                  {
      -                    "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "penalties": {
      -                "items": {
      -                  "additionalProperties": {},
      -                  "properties": {
      -                    "amount": {
      -                      "additionalProperties": {},
      -                      "properties": {
      -                        "amount": {
      -                          "pattern": "^\\d+(\\.\\d+)?$",
      -                          "type": "string"
      -                        },
      -                        "currency": {
      -                          "pattern": "^[A-Z]{3}$",
      -                          "type": "string"
      -                        }
      -                      },
      -                      "required": [
      -                        "amount",
      -                        "currency"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "startsAt": {
      -                      "anyOf": [
      -                        {
      -                          "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    }
      -                  },
      -                  "required": [
      -                    "startsAt",
      -                    "amount"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "status": {
      -                "anyOf": [
      -                  {
      -                    "enum": [
      -                      "free",
      -                      "partial_penalty",
      -                      "non_refundable",
      -                      "unknown"
      -                    ],
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "string"
      -                  }
      -                ]
      -              },
      -              "timeZone": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "status",
      -              "asOf",
      -              "freeCancellationEndsAt",
      -              "penalties",
      -              "timeZone"
      -            ],
      -            "type": "object"
      -          },
      -          "checkIn": {
      -            "type": "string"
      -          },
      -          "checkOut": {
      -            "type": "string"
      -          },
      -          "confirmationNumber": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "hotelId": {
      -            "anyOf": [
      -              {
      -                "pattern": "^htl_[0-9A-Za-z]{20}$",
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "meals": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "allInclusive": {
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "guestsCoveredPerRoom": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "included": {
      -                "anyOf": [
      -                  {
      -                    "items": {
      -                      "anyOf": [
      -                        {
      -                          "enum": [
      -                            "breakfast",
      -                            "lunch",
      -                            "dinner"
      -                          ],
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "string"
      -                        }
      -                      ]
      -                    },
      -                    "type": "array"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "known": {
      -                "type": "boolean"
      -              },
      -              "label": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": {},
      -                    "properties": {
      -                      "locale": {
      -                        "anyOf": [
      -                          {
      -                            "anyOf": [
      -                              {
      -                                "enum": [
      -                                  "en",
      -                                  "zh"
      -                                ],
      -                                "type": "string"
      -                              },
      -                              {
      -                                "type": "string"
      -                              }
      -                            ]
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "text": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "text",
      -                      "locale"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "unspecifiedMainMeals": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "known",
      -              "included",
      -              "unspecifiedMainMeals",
      -              "allInclusive",
      -              "guestsCoveredPerRoom",
      -              "label"
      -            ],
      -            "type": "object"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "names": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "en": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "zh": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "en",
      -              "zh"
      -            ],
      -            "type": "object"
      -          },
      -          "payAtProperty": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "disclosure": {
      -                "anyOf": [
      -                  {
      -                    "enum": [
      -                      "complete",
      -                      "incomplete"
      -                    ],
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "string"
      -                  }
      -                ]
      -              },
      -              "items": {
      -                "items": {
      -                  "additionalProperties": {},
      -                  "properties": {
      -                    "amount": {
      -                      "anyOf": [
      -                        {
      -                          "additionalProperties": {},
      -                          "properties": {
      -                            "amount": {
      -                              "pattern": "^\\d+(\\.\\d+)?$",
      -                              "type": "string"
      -                            },
      -                            "currency": {
      -                              "pattern": "^[A-Z]{3}$",
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "amount",
      -                            "currency"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    },
      -                    "basis": {
      -                      "anyOf": [
      -                        {
      -                          "enum": [
      -                            "per_stay",
      -                            "per_night",
      -                            "per_person",
      -                            "per_person_per_night",
      -                            "unknown"
      -                          ],
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "string"
      -                        }
      -                      ]
      -                    },
      -                    "collectedAt": {
      -                      "anyOf": [
      -                        {
      -                          "enum": [
      -                            "property",
      -                            "unknown"
      -                          ],
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "string"
      -                        }
      -                      ]
      -                    },
      -                    "label": {
      -                      "anyOf": [
      -                        {
      -                          "additionalProperties": {},
      -                          "properties": {
      -                            "locale": {
      -                              "anyOf": [
      -                                {
      -                                  "anyOf": [
      -                                    {
      -                                      "enum": [
      -                                        "en",
      -                                        "zh"
      -                                      ],
      -                                      "type": "string"
      -                                    },
      -                                    {
      -                                      "type": "string"
      -                                    }
      -                                  ]
      -                                },
      -                                {
      -                                  "type": "null"
      -                                }
      -                              ]
      -                            },
      -                            "text": {
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "text",
      -                            "locale"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    },
      -                    "mandatory": {
      -                      "type": "boolean"
      -                    }
      -                  },
      -                  "required": [
      -                    "label",
      -                    "amount",
      -                    "mandatory",
      -                    "basis",
      -                    "collectedAt"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              }
      -            },
      -            "required": [
      -              "disclosure",
      -              "items"
      -            ],
      -            "type": "object"
      -          },
      -          "room": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "beds": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": {},
      -                    "properties": {
      -                      "locale": {
      -                        "anyOf": [
      -                          {
      -                            "anyOf": [
      -                              {
      -                                "enum": [
      -                                  "en",
      -                                  "zh"
      -                                ],
      -                                "type": "string"
      -                              },
      -                              {
      -                                "type": "string"
      -                              }
      -                            ]
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "text": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "text",
      -                      "locale"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "name": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": {},
      -                    "properties": {
      -                      "locale": {
      -                        "anyOf": [
      -                          {
      -                            "anyOf": [
      -                              {
      -                                "enum": [
      -                                  "en",
      -                                  "zh"
      -                                ],
      -                                "type": "string"
      -                              },
      -                              {
      -                                "type": "string"
      -                              }
      -                            ]
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "text": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "text",
      -                      "locale"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "name",
      -              "beds"
      -            ],
      -            "type": "object"
      -          },
      -          "rooms": {
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "adults": {
      -                  "maximum": 9007199254740991,
      -                  "minimum": -9007199254740991,
      -                  "type": "integer"
      -                },
      -                "childrenAges": {
      -                  "items": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "type": "array"
      -                }
      -              },
      -              "required": [
      -                "adults",
      -                "childrenAges"
      -              ],
      -              "type": "object"
      -            },
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "timeZone": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "hotelId",
      -          "name",
      -          "names",
      -          "checkIn",
      -          "checkOut",
      -          "timeZone",
      -          "rooms",
      -          "room",
      -          "meals",
      -          "cancellation",
      -          "payAtProperty",
      -          "confirmationNumber"
      -        ],
      -        "type": "object"
      -      },
      -      "type": {
      -        "const": "hotel",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "hotel"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "type": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "hotel": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "cancellation": {
      +            "additionalProperties": {},
      +            "description": "The terms the order was made on, read at asOf; cancel says whether it can be cancelled now.",
      +            "properties": {
      +              "asOf": {
      +                "description": "When these terms were read: status and penalties are as of this time.",
      +                "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                "type": "string"
      +              },
      +              "freeCancellationEndsAt": {
      +                "anyOf": [
      +                  {
      +                    "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "penalties": {
      +                "items": {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "amount": {
      +                      "additionalProperties": {},
      +                      "properties": {
      +                        "amount": {
      +                          "pattern": "^\\d+(\\.\\d+)?$",
      +                          "type": "string"
      +                        },
      +                        "currency": {
      +                          "pattern": "^[A-Z]{3}$",
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "amount",
      +                        "currency"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "startsAt": {
      +                      "anyOf": [
      +                        {
      +                          "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "startsAt",
      +                    "amount"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "status": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "free",
      +                      "partial_penalty",
      +                      "non_refundable",
      +                      "unknown"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              "timeZone": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "status",
      +              "asOf",
      +              "freeCancellationEndsAt",
      +              "penalties",
      +              "timeZone"
      +            ],
      +            "type": "object"
      +          },
      +          "checkIn": {
      +            "type": "string"
      +          },
      +          "checkOut": {
      +            "type": "string"
      +          },
      +          "confirmationNumber": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "hotelId": {
      +            "anyOf": [
      +              {
      +                "pattern": "^htl_[0-9A-Za-z]{20}$",
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "meals": {
      +            "additionalProperties": {},
      +            "description": "What the rate includes to eat. known false: the meals are unknown, not none, and included, unspecifiedMainMeals and allInclusive are null.",
      +            "properties": {
      +              "allInclusive": {
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "guestsCoveredPerRoom": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "How many guests in each room the meals are for; fewer than the guests in the room means not everyone gets them. null when not stated."
      +              },
      +              "included": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "anyOf": [
      +                        {
      +                          "enum": [
      +                            "breakfast",
      +                            "lunch",
      +                            "dinner"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "string"
      +                        }
      +                      ]
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "known": {
      +                "type": "boolean"
      +              },
      +              "label": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {},
      +                    "properties": {
      +                      "locale": {
      +                        "anyOf": [
      +                          {
      +                            "anyOf": [
      +                              {
      +                                "enum": [
      +                                  "en",
      +                                  "zh"
      +                                ],
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "string"
      +                              }
      +                            ]
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "text",
      +                      "locale"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "unspecifiedMainMeals": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Main meals a day beyond included that the rate doesn't name (e.g. 1 when a half-board rate doesn't say lunch or dinner); null when known is false."
      +              }
      +            },
      +            "required": [
      +              "known",
      +              "included",
      +              "unspecifiedMainMeals",
      +              "allInclusive",
      +              "guestsCoveredPerRoom",
      +              "label"
      +            ],
      +            "type": "object"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "names": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "en": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "zh": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "en",
      +              "zh"
      +            ],
      +            "type": "object"
      +          },
      +          "payAtProperty": {
      +            "additionalProperties": {},
      +            "description": "Fees paid at the property, on top of price.total, in the property's currency, not converted. disclosure incomplete: there may be fees not listed.",
      +            "properties": {
      +              "disclosure": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "complete",
      +                      "incomplete"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              "items": {
      +                "items": {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "amount": {
      +                      "anyOf": [
      +                        {
      +                          "additionalProperties": {},
      +                          "properties": {
      +                            "amount": {
      +                              "pattern": "^\\d+(\\.\\d+)?$",
      +                              "type": "string"
      +                            },
      +                            "currency": {
      +                              "pattern": "^[A-Z]{3}$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "amount",
      +                            "currency"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    },
      +                    "basis": {
      +                      "anyOf": [
      +                        {
      +                          "enum": [
      +                            "per_stay",
      +                            "per_night",
      +                            "per_person",
      +                            "per_person_per_night",
      +                            "unknown"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "string"
      +                        }
      +                      ]
      +                    },
      +                    "collectedAt": {
      +                      "anyOf": [
      +                        {
      +                          "enum": [
      +                            "property",
      +                            "unknown"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "string"
      +                        }
      +                      ]
      +                    },
      +                    "label": {
      +                      "anyOf": [
      +                        {
      +                          "additionalProperties": {},
      +                          "properties": {
      +                            "locale": {
      +                              "anyOf": [
      +                                {
      +                                  "anyOf": [
      +                                    {
      +                                      "enum": [
      +                                        "en",
      +                                        "zh"
      +                                      ],
      +                                      "type": "string"
      +                                    },
      +                                    {
      +                                      "type": "string"
      +                                    }
      +                                  ]
      +                                },
      +                                {
      +                                  "type": "null"
      +                                }
      +                              ]
      +                            },
      +                            "text": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "text",
      +                            "locale"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    },
      +                    "mandatory": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "label",
      +                    "amount",
      +                    "mandatory",
      +                    "basis",
      +                    "collectedAt"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "disclosure",
      +              "items"
      +            ],
      +            "type": "object"
      +          },
      +          "room": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "beds": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {},
      +                    "properties": {
      +                      "locale": {
      +                        "anyOf": [
      +                          {
      +                            "anyOf": [
      +                              {
      +                                "enum": [
      +                                  "en",
      +                                  "zh"
      +                                ],
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "string"
      +                              }
      +                            ]
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "text",
      +                      "locale"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "name": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {},
      +                    "properties": {
      +                      "locale": {
      +                        "anyOf": [
      +                          {
      +                            "anyOf": [
      +                              {
      +                                "enum": [
      +                                  "en",
      +                                  "zh"
      +                                ],
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "string"
      +                              }
      +                            ]
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "text",
      +                      "locale"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "beds"
      +            ],
      +            "type": "object"
      +          },
      +          "rooms": {
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "adults": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                },
      +                "childrenAges": {
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "type": "array"
      +                }
      +              },
      +              "required": [
      +                "adults",
      +                "childrenAges"
      +              ],
      +              "type": "object"
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "timeZone": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "hotelId",
      +          "name",
      +          "names",
      +          "checkIn",
      +          "checkOut",
      +          "timeZone",
      +          "rooms",
      +          "room",
      +          "meals",
      +          "cancellation",
      +          "payAtProperty",
      +          "confirmationNumber"
      +        ],
      +        "type": "object"
      +      },
      +      "type": {
      +        "const": "hotel",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "hotel"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedOutput schema / properties / payment / properties / chargeCurrency / description
      Added value: +"USD or CNY: the currency of the offer the order was made from. An order made on the Fortrip website may be in another currency."
    • removedOutput schema / properties / payment / properties / credentialLimits
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": {},
      -      "properties": {
      -        "currency": {
      -          "description": "The token's currency, lowercase as Stripe takes it: usd.",
      -          "type": "string"
      -        },
      -        "expiresAt": {
      -          "description": "Request the token valid until at least this time; the order can't be paid after it.",
      -          "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -          "type": "string"
      -        },
      -        "maxAmount": {
      -          "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "maxAmount",
      -        "currency",
      -        "expiresAt"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "What the shared payment token for pay_order must allow. null exactly when handlers is []."
      -}
    • addedOutput schema / properties / payment / properties / expiresAt / description
      Added value: +"When the time to pay ends: an order unpaid by then expires, with nothing charged. null unless status is awaiting_payment."
    • removedOutput schema / properties / payment / properties / handlers
      Removed value: -{
      -  "description": "The ways to pay other than url: a com.stripe.payments handler takes a Stripe shared payment token through pay_order. [] when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, or token payment isn't offered for this order.",
      -  "items": {
      -    "additionalProperties": {},
      -    "properties": {
      -      "available_instruments": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "config": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "config": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "business_profile": {
      -            "type": "string"
      -          },
      -          "environment": {
      -            "anyOf": [
      -              {
      -                "enum": [
      -                  "livemode",
      -                  "testmode"
      -                ],
      -                "type": "string"
      -              },
      -              {
      -                "type": "string"
      -              }
      -            ]
      -          }
      -        },
      -        "required": [
      -          "environment",
      -          "business_profile"
      -        ],
      -        "type": "object"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "schema": {
      -        "type": "string"
      -      },
      -      "spec": {
      -        "type": "string"
      -      },
      -      "type": {
      -        "type": "string"
      -      },
      -      "version": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "type",
      -      "version",
      -      "spec",
      -      "schema",
      -      "available_instruments",
      -      "config"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / payment / properties / localCharge / description
      Added value: +"What the card was charged in its own currency, when Stripe converted the total; otherwise null. Always null on a CNY order."
    • addedOutput schema / properties / payment / properties / localCurrencyAtCheckout / description
      Added value: +"Whether paying by url may charge the card in its own currency, converted by Stripe; false once paid by token, Alipay or WeChat Pay; always false on a CNY order."
    • addedOutput schema / properties / payment / properties / methods
      Added value: +{
      +  "description": "What pay_order accepts for this order now, by id. [] means: give the user payment.url, when it isn't null.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": {},
      +        "description": "A Stripe shared payment token, through pay_order's sharedPaymentToken or payment. The entry is absent when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, an Alipay or WeChat Pay payment is open, or token payment isn't offered for this order.",
      +        "properties": {
      +          "handler": {
      +            "additionalProperties": {},
      +            "description": "The com.stripe.payments handler, which takes the token.",
      +            "properties": {
      +              "available_instruments": {
      +                "items": {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "config": {
      +                      "additionalProperties": {},
      +                      "propertyNames": {
      +                        "type": "string"
      +                      },
      +                      "type": "object"
      +                    },
      +                    "type": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "type"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "config": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "business_profile": {
      +                    "type": "string"
      +                  },
      +                  "environment": {
      +                    "anyOf": [
      +                      {
      +                        "enum": [
      +                          "livemode",
      +                          "testmode"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "string"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "environment",
      +                  "business_profile"
      +                ],
      +                "type": "object"
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "schema": {
      +                "type": "string"
      +              },
      +              "spec": {
      +                "type": "string"
      +              },
      +              "type": {
      +                "type": "string"
      +              },
      +              "version": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "type",
      +              "version",
      +              "spec",
      +              "schema",
      +              "available_instruments",
      +              "config"
      +            ],
      +            "type": "object"
      +          },
      +          "id": {
      +            "const": "stripe_shared_payment_token",
      +            "type": "string"
      +          },
      +          "limits": {
      +            "additionalProperties": {},
      +            "description": "What the shared payment token for pay_order must allow.",
      +            "properties": {
      +              "currency": {
      +                "description": "The token's currency, lowercase as Stripe takes it: usd.",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "description": "Request the token valid until at least this time; the order can't be paid after it.",
      +                "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                "type": "string"
      +              },
      +              "maxAmount": {
      +                "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "maxAmount",
      +              "currency",
      +              "expiresAt"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "handler",
      +          "limits"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": {},
      +        "description": "Paying with Alipay or WeChat Pay: pass method stripe_alipay_wechat_pay to pay_order to open it. The entry is absent when the order can't be paid this way and none is open, as on a CNY order.",
      +        "properties": {
      +          "alipay": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "url": {
      +                    "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "url"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The Alipay link; null until the payment is open."
      +          },
      +          "current": {
      +            "anyOf": [
      +              {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "wechat_pay",
      +                      "alipay"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which of the two the payment is on now; null until it is open."
      +          },
      +          "id": {
      +            "const": "stripe_alipay_wechat_pay",
      +            "type": "string"
      +          },
      +          "open": {
      +            "description": "Whether pay_order has opened an Alipay or WeChat Pay payment on this order.",
      +            "type": "boolean"
      +          },
      +          "wechatPay": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "qrData": {
      +                    "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "qrImageUrl": {
      +                    "description": "A 480 px PNG of the same code.",
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "url": {
      +                    "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "qrData",
      +                  "qrImageUrl",
      +                  "url"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The WeChat Pay code and link; null until the payment is open."
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "open",
      +          "current",
      +          "wechatPay",
      +          "alipay"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": {},
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / payment / properties / url / description
      Previous value: -"The payment page, on fortrip.ai. With requiresSignIn false it continues to Stripe Checkout, and anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null when the order isn't awaiting payment, or, while it is, when the link couldn't be read this time: read the order again."New value: +"The payment page, on fortrip.ai; it continues to the payment provider. With requiresSignIn false anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null while a payment is held (authorized) or when the order isn't awaiting payment, or, while it is and its payment is unpaid, when the link couldn't be read this time: read the order again."
    • removedOutput schema / properties / payment / properties / wallets
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": {},
      -      "properties": {
      -        "alipay": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": {},
      -              "properties": {
      -                "url": {
      -                  "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "url"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "The Alipay link; null until the payment is open."
      -        },
      -        "current": {
      -          "anyOf": [
      -            {
      -              "anyOf": [
      -                {
      -                  "enum": [
      -                    "wechat_pay",
      -                    "alipay"
      -                  ],
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "string"
      -                }
      -              ]
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "The wallet the payment is on now; null until it is open."
      -        },
      -        "open": {
      -          "description": "Whether pay_order has opened a wallet payment on this order.",
      -          "type": "boolean"
      -        },
      -        "wechatPay": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": {},
      -              "properties": {
      -                "qrData": {
      -                  "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "qrImageUrl": {
      -                  "description": "A 480 px PNG of the same code.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "url": {
      -                  "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "qrData",
      -                "qrImageUrl",
      -                "url"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "The WeChat Pay code and link; null until the payment is open."
      -        }
      -      },
      -      "required": [
      -        "open",
      -        "current",
      -        "wechatPay",
      -        "alipay"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "Paying with Alipay or WeChat Pay: pass method alipay_wechat_pay to pay_order to open it. null when the order can't be paid this way and none is open."
      -}
    • changedOutput schema / properties / payment / required
      Previous value: -[
      -  "status",
      -  "url",
      -  "requiresSignIn",
      -  "expiresAt",
      -  "chargeCurrency",
      -  "localCurrencyAtCheckout",
      -  "localCharge",
      -  "handlers",
      -  "credentialLimits",
      -  "wallets"
      -]New value: +[
      +  "status",
      +  "url",
      +  "requiresSignIn",
      +  "expiresAt",
      +  "chargeCurrency",
      +  "localCurrencyAtCheckout",
      +  "localCharge",
      +  "methods"
      +]
    • addedOutput schema / properties / price / properties / total / description
      Added value: +"The whole stay for all rooms, in payment.chargeCurrency: what paying charges, or once paid what was charged. Fees payable at the property are not in it."
    • addedOutput schema / properties / status / description
      Added value: +"awaiting_payment: unpaid, nothing charged; payable until payment.expiresAt. expired: not paid; the time ran out or the order was closed. Nothing charged. confirming: paid or held, the booking is with the hotel. confirmed: the hotel confirmed and the payment is charged. failed: no stay was booked; payment.status says what became of the money. cancelling, then cancelled: a cancellation under the terms. needs_attention: a person at Fortrip has to resolve it."
  3. Changed2 schema fields changed
    • addedOutput schema / properties / payment / properties / wallets
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "alipay": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {
      +                "url": {
      +                  "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The Alipay link; null until the payment is open."
      +        },
      +        "current": {
      +          "anyOf": [
      +            {
      +              "anyOf": [
      +                {
      +                  "enum": [
      +                    "wechat_pay",
      +                    "alipay"
      +                  ],
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "string"
      +                }
      +              ]
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The wallet the payment is on now; null until it is open."
      +        },
      +        "open": {
      +          "description": "Whether pay_order has opened a wallet payment on this order.",
      +          "type": "boolean"
      +        },
      +        "wechatPay": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {
      +                "qrData": {
      +                  "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "qrImageUrl": {
      +                  "description": "A 480 px PNG of the same code.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "url": {
      +                  "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "qrData",
      +                "qrImageUrl",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The WeChat Pay code and link; null until the payment is open."
      +        }
      +      },
      +      "required": [
      +        "open",
      +        "current",
      +        "wechatPay",
      +        "alipay"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Paying with Alipay or WeChat Pay: pass method alipay_wechat_pay to pay_order to open it. null when the order can't be paid this way and none is open."
      +}
    • changedOutput schema / properties / payment / required
      Previous value: -[
      -  "status",
      -  "url",
      -  "requiresSignIn",
      -  "expiresAt",
      -  "chargeCurrency",
      -  "localCurrencyAtCheckout",
      -  "localCharge",
      -  "handlers",
      -  "credentialLimits"
      -]New value: +[
      +  "status",
      +  "url",
      +  "requiresSignIn",
      +  "expiresAt",
      +  "chargeCurrency",
      +  "localCurrencyAtCheckout",
      +  "localCharge",
      +  "handlers",
      +  "credentialLimits",
      +  "wallets"
      +]
  4. Changed11 schema fields changed
    • changedInput schema / properties / maximumPenalty / description
      Previous value: -"The penalty the user agreed to: cancel.penalty.amount of the order, in its currency."New value: +"The penalty the user agreed to, in the order's currency. Pass maximumPenalty as the number in cancel.penalty.amount (\"120.00\" → 120)."
    • changedInput schema / properties / orderId / description
      Previous value: -"orderId of the order to cancel, from get order or list orders."New value: +"The orderId of the order to cancel."
    • addedOutput schema / properties / cancel / description
      Added value: +"Whether the order can be cancelled now, and for what penalty and refund."
    • addedOutput schema / properties / cancel / properties / available / description
      Added value: +"Whether the user can cancel the order now."
    • addedOutput schema / properties / cancel / properties / penalty / description
      Added value: +"The penalty if cancelled now, under the accepted terms, in the charge currency; null when not stated."
    • addedOutput schema / properties / cancel / properties / reason / description
      Added value: +"cancellable when it can be cancelled now; otherwise why not."
    • addedOutput schema / properties / cancel / properties / refund / description
      Added value: +"What a cancellation now refunds: what was paid less the penalty, in the charge currency; null when not stated."
    • changedOutput schema / properties / payment / properties / credentialLimits / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "currency": {
      -        "type": "string"
      -      },
      -      "expiresAt": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -        "type": "string"
      -      },
      -      "maxAmount": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "maxAmount",
      -      "currency",
      -      "expiresAt"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "currency": {
      +        "description": "The token's currency, lowercase as Stripe takes it: usd.",
      +        "type": "string"
      +      },
      +      "expiresAt": {
      +        "description": "Request the token valid until at least this time; the order can't be paid after it.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +        "type": "string"
      +      },
      +      "maxAmount": {
      +        "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "maxAmount",
      +      "currency",
      +      "expiresAt"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / payment / properties / credentialLimits / description
      Added value: +"What the shared payment token for pay_order must allow. null exactly when handlers is []."
    • addedOutput schema / properties / payment / properties / handlers / description
      Added value: +"The ways to pay other than url: a com.stripe.payments handler takes a Stripe shared payment token through pay_order. [] when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, or token payment isn't offered for this order."
    • addedOutput schema / properties / payment / properties / url / description
      Added value: +"The payment page, on fortrip.ai. With requiresSignIn false it continues to Stripe Checkout, and anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null when the order isn't awaiting payment, or, while it is, when the link couldn't be read this time: read the order again."
  5. Changed12 schema fields changed
    • removedOutput schema / properties / payment / properties / credentialLimits / additionalProperties
      Removed value: -{}
    • addedOutput schema / properties / payment / properties / credentialLimits / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "currency": {
      +        "type": "string"
      +      },
      +      "expiresAt": {
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +        "type": "string"
      +      },
      +      "maxAmount": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "maxAmount",
      +      "currency",
      +      "expiresAt"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / payment / properties / credentialLimits / properties
      Removed value: -{
      -  "currency": {
      -    "type": "string"
      -  },
      -  "expiresAt": {
      -    "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -    "type": "string"
      -  },
      -  "maxAmount": {
      -    "maximum": 9007199254740991,
      -    "minimum": -9007199254740991,
      -    "type": "integer"
      -  }
      -}
    • removedOutput schema / properties / payment / properties / credentialLimits / required
      Removed value: -[
      -  "maxAmount",
      -  "currency",
      -  "expiresAt"
      -]
    • removedOutput schema / properties / payment / properties / credentialLimits / type
      Removed value: -"object"
    • addedOutput schema / properties / payment / properties / handlers / items / properties / available_instruments
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "config": {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / payment / properties / handlers / items / properties / config
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "business_profile": {
      +      "type": "string"
      +    },
      +    "environment": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "livemode",
      +            "testmode"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "string"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "environment",
      +    "business_profile"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / payment / properties / handlers / items / properties / networkId
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / payment / properties / handlers / items / properties / schema
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / payment / properties / handlers / items / required
      Previous value: -[
      -  "id",
      -  "type",
      -  "version",
      -  "spec",
      -  "networkId"
      -]New value: +[
      +  "id",
      +  "type",
      +  "version",
      +  "spec",
      +  "schema",
      +  "available_instruments",
      +  "config"
      +]
    • changedOutput schema / properties / payment / required
      Previous value: -[
      -  "status",
      -  "url",
      -  "requiresSignIn",
      -  "expiresAt",
      -  "chargeCurrency",
      -  "localCurrencyAtCheckout",
      -  "localCharge"
      -]New value: +[
      +  "status",
      +  "url",
      +  "requiresSignIn",
      +  "expiresAt",
      +  "chargeCurrency",
      +  "localCurrencyAtCheckout",
      +  "localCharge",
      +  "handlers",
      +  "credentialLimits"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "orderId",
      -  "reference",
      -  "status",
      -  "createdAt",
      -  "updatedAt",
      -  "items",
      -  "price",
      -  "payment",
      -  "manageUrl"
      -]New value: +[
      +  "orderId",
      +  "reference",
      +  "status",
      +  "createdAt",
      +  "updatedAt",
      +  "items",
      +  "price",
      +  "payment",
      +  "cancel",
      +  "manageUrl"
      +]
  6. Changed2 schema fields changed
    • addedOutput schema / properties / payment / properties / credentialLimits
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "currency": {
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +      "type": "string"
      +    },
      +    "maxAmount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "maxAmount",
      +    "currency",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / payment / properties / handlers
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "networkId": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "spec": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "type": "string"
      +      },
      +      "version": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "type",
      +      "version",
      +      "spec",
      +      "networkId"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  7. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructive=true and idempotent=true, but the description goes well beyond them: it discloses the state machine (cancelling → cancelled or confirmed/refused), what happens to money (refunded, or penalty charged), that the hotel may refuse, and that repeat calls simply return the order's current state. It also warns never to state a refund the order did not return, which is meaningful behavioral guidance.

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

Conciseness4/5

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

The critical precondition — do not cancel a paid order without the user's explicit yes — is front-loaded, and no sentence is filler. It is, however, extremely dense and telegraphic (fragments like 'Paid (cancel.reason cancellable)'), which costs some readability for an agent parsing the branching logic.

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

Completeness5/5

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

For a two-parameter mutation tool with an output schema available, the description covers every branch an agent will encounter: both order states, the confirmation gate, the penalty ceiling, hotel refusal, concurrent payment, and repeat-call behavior. 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 real meaning: maximumPenalty must be exactly the order's cancel.penalty as returned and only after the user confirmed it, and it must be omitted when closing an unpaid order. That is semantic guidance the schema cannot express. It does not, however, restate the amount/currency format constraints, which remain solely 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?

The description opens with a precise verb+resource pair and immediately splits it into two distinguishable modes: cancelling a paid order under its terms versus closing an unpaid one. That split is exactly what an agent needs to tell this apart from siblings like get_order or pay_order.

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 preconditions for each path: paid cancellation requires the user's clear yes after seeing cancel.penalty and cancel.refund; unpaid closure requires the user to say they no longer want it. It also names follow-up routes (poll get_order), and enumerates the error outcomes (invalid_request, order_not_cancellable, order_in_progress, cancellation_changed, payment_in_progress) with what to do in each case.

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