Skip to main content
Glama

Pay order

pay_order
Idempotent

Pay a USD order without its link, by one of its payment.methods: a Stripe shared payment token, only if you can request one from the user's Link wallet (US and Canadian accounts; never ask the user for one), or Alipay/WeChat Pay (method stripe_alipay_wechat_pay). Call it only after the user confirmed the order's total and currency, the stay and every term with a clear yes. Token: request it with the entry's handler config.business_profile and limits, and pass it with price.total; a token pays one order. Wallet: pass method and price.total, then show the entry it returns: the WeChat code as an image if you can, and both links; the user pays once, by either. A code lasts 120 minutes; then the WeChat link opens a new one, or call again. Pay one way only: success closes payment.url, a failure leaves it open, and each error says how to recover. Then poll get_order.

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>",
      "total": "<total>"
    },
    "name": "pay_order"
  }
}

Input Schema

NameRequiredDescriptionDefault
totalYesThe total the user approved: the order's price.total, in its currency, exactly as returned.
methodNoPay by a method in payment.methods other than the token, which is paid with sharedPaymentToken or payment. Exactly one of sharedPaymentToken, payment and method.
orderIdYesThe orderId of the order to pay.
paymentNoUCP's Complete Checkout payment, in place of sharedPaymentToken: the token as the stripe_payment_token credential of the one selected stripe_payments card instrument. Exactly one of sharedPaymentToken, payment and method.
sharedPaymentTokenNoThe shared payment token (spt_…) the user approved for this order, requested with the limits of the order's stripe_shared_payment_token method. Exactly one of sharedPaymentToken, payment and method.

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. Changed25 schema fields changed
    • changedInput schema / properties / method / description
      Previous value: -"Pay with Alipay or WeChat Pay instead of a token: opens the payment and returns payment.wallets. Exactly one of sharedPaymentToken, payment and method."New value: +"Pay by a method in payment.methods other than the token, which is paid with sharedPaymentToken or payment. Exactly one of sharedPaymentToken, payment and method."
    • changedInput schema / properties / method / enum
      Previous value: -[
      -  "alipay_wechat_pay"
      -]New value: +[
      +  "stripe_alipay_wechat_pay"
      +]
    • changedInput schema / properties / payment / properties / instruments / items / properties / credential / properties / token / description
      Previous value: -"The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits."New value: +"The shared payment token (spt_…) the user approved for this order, requested with the limits of the order's stripe_shared_payment_token method."
    • changedInput schema / properties / sharedPaymentToken / description
      Previous value: -"The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits. Exactly one of sharedPaymentToken, payment and method."New value: +"The shared payment token (spt_…) the user approved for this order, requested with the limits of the order's stripe_shared_payment_token method. Exactly one of sharedPaymentToken, payment and method."
    • changedInput schema / properties / total / description
      Previous value: -"The total the user approved: the order's price.total, exactly as returned."New value: +"The total the user approved: the order's price.total, in its currency, exactly as returned."
    • removedInput schema / properties / total / properties / currency / const
      Removed value: -"USD"
    • changedInput schema / properties / total / properties / currency / description
      Previous value: -"Always USD in a request."New value: +"USD or CNY."
    • addedInput schema / properties / total / properties / currency / enum
      Added value: +[
      +  "USD",
      +  "CNY"
      +]
    • 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. Changed5 schema fields changed
    • addedInput schema / properties / method
      Added value: +{
      +  "description": "Pay with Alipay or WeChat Pay instead of a token: opens the payment and returns payment.wallets. Exactly one of sharedPaymentToken, payment and method.",
      +  "enum": [
      +    "alipay_wechat_pay"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / payment / description
      Previous value: -"UCP's Complete Checkout payment, in place of sharedPaymentToken: the token as the stripe_payment_token credential of the one selected stripe_payments card instrument. Exactly one of sharedPaymentToken and payment."New value: +"UCP's Complete Checkout payment, in place of sharedPaymentToken: the token as the stripe_payment_token credential of the one selected stripe_payments card instrument. Exactly one of sharedPaymentToken, payment and method."
    • changedInput schema / properties / sharedPaymentToken / description
      Previous value: -"The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits. Exactly one of sharedPaymentToken and payment."New value: +"The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits. Exactly one of sharedPaymentToken, payment and method."
    • 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 / orderId / description
      Previous value: -"orderId of the order to pay, from create order or get order."New value: +"The orderId of the order to pay."
    • changedInput schema / properties / payment / properties / instruments / items / properties / type / description
      Previous value: -"The instrument type: card for the selected one."New value: +"The instrument type: card for the selected one. A Link token is presented as a card instrument, whatever Link funds it with."
    • 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. Changed15 schema fields changed
    • addedInput schema / properties / payment
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "UCP's Complete Checkout payment, in place of sharedPaymentToken: the token as the stripe_payment_token credential of the one selected stripe_payments card instrument. Exactly one of sharedPaymentToken and payment.",
      +  "properties": {
      +    "instruments": {
      +      "description": "The instruments, exactly one of them selected.",
      +      "items": {
      +        "additionalProperties": {},
      +        "description": "A UCP payment instrument.",
      +        "properties": {
      +          "credential": {
      +            "additionalProperties": {},
      +            "description": "The instrument's credential: for the selected one, the shared payment token.",
      +            "properties": {
      +              "token": {
      +                "description": "The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits.",
      +                "type": "string"
      +              },
      +              "type": {
      +                "description": "The credential type: stripe_payment_token for the selected one.",
      +                "minLength": 1,
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type"
      +            ],
      +            "type": "object"
      +          },
      +          "display": {
      +            "additionalProperties": {},
      +            "description": "How the wallet shows the instrument, as UCP has it. Not used to pay.",
      +            "properties": {},
      +            "type": "object"
      +          },
      +          "handler_id": {
      +            "description": "The id of the handler the instrument pays through: the order's stripe_payments for the selected one.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "id": {
      +            "description": "The instrument's id, as the agent's UCP client names it.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "selected": {
      +            "description": "Whether this is the instrument to pay with. Exactly one is selected; a lone instrument without it is the one.",
      +            "type": "boolean"
      +          },
      +          "type": {
      +            "description": "The instrument type: card for the selected one.",
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "handler_id",
      +          "type"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 8,
      +      "minItems": 1,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "instruments"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / sharedPaymentToken / description
      Previous value: -"The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits."New value: +"The shared payment token (spt_…) the user approved for this order, requested with the order's payment.credentialLimits. Exactly one of sharedPaymentToken and payment."
    • changedInput schema / required
      Previous value: -[
      -  "orderId",
      -  "sharedPaymentToken",
      -  "total"
      -]New value: +[
      +  "orderId",
      +  "total"
      +]
    • 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. Added

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true, openWorldHint=true, destructiveHint=false), the description discloses substantive behavior: a token pays exactly one order, the WeChat code lasts 120 minutes, success closes payment.url while failure leaves it open, and each error states how to recover. It also instructs presenting the returned entry as an image with both links, and that the user pays once by either.

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 purpose and the gating condition are front-loaded, and every clause carries operational information. The sentences are long and multi-clause ('Token: request it with... Wallet: pass method and price.total, then show the entry it returns...'), which makes the middle slightly hard to parse, but there is little genuine waste for a tool of this complexity.

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

Completeness4/5

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

With an output schema present, return values needn't be explained, and the description covers preconditions, the two payment paths, expiry behavior, and error recovery. The remaining gap is what happens on a repeat call against an already-paid order, which the idempotentHint annotation implies but the description does not spell out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains how to obtain the token ('request it with the entry's handler config.business_profile and limits') and that it must be passed with price.total, and that the wallet route passes method plus price.total. The single-use nature of the token ('a token pays one order') is operational semantics the schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+scope: 'Pay a USD order without its link, by one of its payment.methods', then enumerates the two supported routes (Stripe shared payment token, or Alipay/WeChat Pay via stripe_alipay_wechat_pay). This is clearly distinguishable from get_order (which it explicitly says to poll afterward) and from read-only siblings like list_orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It states explicit preconditions ('Call it only after the user confirmed the order's total and currency, the stay and every term with a clear yes'), an exclusion ('never ask the user for one' regarding the token), a mutual-exclusivity rule ('Pay one way only'), and the follow-up step ('Then poll get_order'). Nothing about when to invoke versus not invoke is left to inference.

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