Skip to main content
Glama

Create order

book_hotel

Order one offer from get_hotel_offers. The answer is an unpaid order with a payment link: status awaiting_payment, the total, the stay and its terms, and payment.url, a Fortrip page to pay on. Nothing is charged until the order is paid, on that page or with pay_order; anyone holding the link can pay. Send the contact and, for each room of the offer, at least one guest. If the price or terms changed since the offer, the answer is offer_changed with every change and a new offer: show the changes and ask the user again before ordering it. Sending the same details again returns the same order. An offer is ordered once: for another order of the stay (another party, or a corrected guest name), get offers again and order the new offer; when it replaces an unpaid order, tell the user to pay only the new link, as the earlier one expires unpaid. To cancel an order, use cancel_order; for changes, or a cancellation cancel_order can't make, the user emails info@fortrip.ai with the order's reference.

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": {
      "contact": "<contact>",
      "items": "<items>"
    },
    "name": "book_hotel"
  }
}

Input Schema

NameRequiredDescriptionDefault
itemsYesThe offer to book: exactly one.
contactYesWho the hotel and the confirmation reach.

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
nextStepNoWhat to show and ask before giving a payment.url. Present when the answer holds a non-null payment.url, and only then.
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. Changed17 schema fields changed
    • changedOutput schema / properties / cancel / properties / available / description
      Previous value: -"Whether the user can cancel the order now."New value: +"Whether the user can cancel the order now, or, unpaid (reason unpaid), close it."
    • changedOutput schema / properties / cancel / properties / penalty / description
      Previous value: -"The penalty if cancelled now, under the accepted terms, in the charge currency; null when not stated."New value: +"The penalty if cancelled now, under the accepted terms, in the charge currency; null when not stated, except on an unpaid order (reason unpaid), where null means closing it charges nothing."
    • changedOutput schema / properties / cancel / properties / reason / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "cancellable",
      -      "already_cancelled",
      -      "in_progress",
      -      "not_confirmed",
      -      "stay_started",
      -      "non_refundable",
      -      "refused",
      -      "terms_unknown",
      -      "needs_attention"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "cancellable",
      +      "unpaid",
      +      "already_cancelled",
      +      "in_progress",
      +      "not_confirmed",
      +      "stay_started",
      +      "non_refundable",
      +      "refused",
      +      "terms_unknown",
      +      "needs_attention"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • changedOutput schema / properties / cancel / properties / reason / description
      Previous value: -"cancellable when it can be cancelled now; otherwise why not."New value: +"cancellable: a paid order can be cancelled now; unpaid: an unpaid order can be closed; otherwise why not."
    • changedOutput schema / properties / items / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "hotel": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "cancellation": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "asOf": {
      -                "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -                "type": "string"
      -              },
      -              "freeCancellationEndsAt": {
      -                "anyOf": [
      -                  {
      -                    "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "penalties": {
      -                "items": {
      -                  "additionalProperties": {},
      -                  "properties": {
      -                    "amount": {
      -                      "additionalProperties": {},
      -                      "properties": {
      -                        "amount": {
      -                          "pattern": "^\\d+(\\.\\d+)?$",
      -                          "type": "string"
      -                        },
      -                        "currency": {
      -                          "pattern": "^[A-Z]{3}$",
      -                          "type": "string"
      -                        }
      -                      },
      -                      "required": [
      -                        "amount",
      -                        "currency"
      -                      ],
      -                      "type": "object"
      -                    },
      -                    "startsAt": {
      -                      "anyOf": [
      -                        {
      -                          "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    }
      -                  },
      -                  "required": [
      -                    "startsAt",
      -                    "amount"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "status": {
      -                "anyOf": [
      -                  {
      -                    "enum": [
      -                      "free",
      -                      "partial_penalty",
      -                      "non_refundable",
      -                      "unknown"
      -                    ],
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "string"
      -                  }
      -                ]
      -              },
      -              "timeZone": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "status",
      -              "asOf",
      -              "freeCancellationEndsAt",
      -              "penalties",
      -              "timeZone"
      -            ],
      -            "type": "object"
      -          },
      -          "checkIn": {
      -            "type": "string"
      -          },
      -          "checkOut": {
      -            "type": "string"
      -          },
      -          "confirmationNumber": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "hotelId": {
      -            "anyOf": [
      -              {
      -                "pattern": "^htl_[0-9A-Za-z]{20}$",
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "meals": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "allInclusive": {
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "guestsCoveredPerRoom": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "included": {
      -                "anyOf": [
      -                  {
      -                    "items": {
      -                      "anyOf": [
      -                        {
      -                          "enum": [
      -                            "breakfast",
      -                            "lunch",
      -                            "dinner"
      -                          ],
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "string"
      -                        }
      -                      ]
      -                    },
      -                    "type": "array"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "known": {
      -                "type": "boolean"
      -              },
      -              "label": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": {},
      -                    "properties": {
      -                      "locale": {
      -                        "anyOf": [
      -                          {
      -                            "anyOf": [
      -                              {
      -                                "enum": [
      -                                  "en",
      -                                  "zh"
      -                                ],
      -                                "type": "string"
      -                              },
      -                              {
      -                                "type": "string"
      -                              }
      -                            ]
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "text": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "text",
      -                      "locale"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "unspecifiedMainMeals": {
      -                "anyOf": [
      -                  {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "known",
      -              "included",
      -              "unspecifiedMainMeals",
      -              "allInclusive",
      -              "guestsCoveredPerRoom",
      -              "label"
      -            ],
      -            "type": "object"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "names": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "en": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "zh": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "en",
      -              "zh"
      -            ],
      -            "type": "object"
      -          },
      -          "payAtProperty": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "disclosure": {
      -                "anyOf": [
      -                  {
      -                    "enum": [
      -                      "complete",
      -                      "incomplete"
      -                    ],
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "string"
      -                  }
      -                ]
      -              },
      -              "items": {
      -                "items": {
      -                  "additionalProperties": {},
      -                  "properties": {
      -                    "amount": {
      -                      "anyOf": [
      -                        {
      -                          "additionalProperties": {},
      -                          "properties": {
      -                            "amount": {
      -                              "pattern": "^\\d+(\\.\\d+)?$",
      -                              "type": "string"
      -                            },
      -                            "currency": {
      -                              "pattern": "^[A-Z]{3}$",
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "amount",
      -                            "currency"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    },
      -                    "basis": {
      -                      "anyOf": [
      -                        {
      -                          "enum": [
      -                            "per_stay",
      -                            "per_night",
      -                            "per_person",
      -                            "per_person_per_night",
      -                            "unknown"
      -                          ],
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "string"
      -                        }
      -                      ]
      -                    },
      -                    "collectedAt": {
      -                      "anyOf": [
      -                        {
      -                          "enum": [
      -                            "property",
      -                            "unknown"
      -                          ],
      -                          "type": "string"
      -                        },
      -                        {
      -                          "type": "string"
      -                        }
      -                      ]
      -                    },
      -                    "label": {
      -                      "anyOf": [
      -                        {
      -                          "additionalProperties": {},
      -                          "properties": {
      -                            "locale": {
      -                              "anyOf": [
      -                                {
      -                                  "anyOf": [
      -                                    {
      -                                      "enum": [
      -                                        "en",
      -                                        "zh"
      -                                      ],
      -                                      "type": "string"
      -                                    },
      -                                    {
      -                                      "type": "string"
      -                                    }
      -                                  ]
      -                                },
      -                                {
      -                                  "type": "null"
      -                                }
      -                              ]
      -                            },
      -                            "text": {
      -                              "type": "string"
      -                            }
      -                          },
      -                          "required": [
      -                            "text",
      -                            "locale"
      -                          ],
      -                          "type": "object"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    },
      -                    "mandatory": {
      -                      "type": "boolean"
      -                    }
      -                  },
      -                  "required": [
      -                    "label",
      -                    "amount",
      -                    "mandatory",
      -                    "basis",
      -                    "collectedAt"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              }
      -            },
      -            "required": [
      -              "disclosure",
      -              "items"
      -            ],
      -            "type": "object"
      -          },
      -          "room": {
      -            "additionalProperties": {},
      -            "properties": {
      -              "beds": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": {},
      -                    "properties": {
      -                      "locale": {
      -                        "anyOf": [
      -                          {
      -                            "anyOf": [
      -                              {
      -                                "enum": [
      -                                  "en",
      -                                  "zh"
      -                                ],
      -                                "type": "string"
      -                              },
      -                              {
      -                                "type": "string"
      -                              }
      -                            ]
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "text": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "text",
      -                      "locale"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "name": {
      -                "anyOf": [
      -                  {
      -                    "additionalProperties": {},
      -                    "properties": {
      -                      "locale": {
      -                        "anyOf": [
      -                          {
      -                            "anyOf": [
      -                              {
      -                                "enum": [
      -                                  "en",
      -                                  "zh"
      -                                ],
      -                                "type": "string"
      -                              },
      -                              {
      -                                "type": "string"
      -                              }
      -                            ]
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "text": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "text",
      -                      "locale"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "name",
      -              "beds"
      -            ],
      -            "type": "object"
      -          },
      -          "rooms": {
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "adults": {
      -                  "maximum": 9007199254740991,
      -                  "minimum": -9007199254740991,
      -                  "type": "integer"
      -                },
      -                "childrenAges": {
      -                  "items": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "type": "array"
      -                }
      -              },
      -              "required": [
      -                "adults",
      -                "childrenAges"
      -              ],
      -              "type": "object"
      -            },
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "timeZone": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "hotelId",
      -          "name",
      -          "names",
      -          "checkIn",
      -          "checkOut",
      -          "timeZone",
      -          "rooms",
      -          "room",
      -          "meals",
      -          "cancellation",
      -          "payAtProperty",
      -          "confirmationNumber"
      -        ],
      -        "type": "object"
      -      },
      -      "type": {
      -        "const": "hotel",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "hotel"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "type": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "hotel": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "cancellation": {
      +            "additionalProperties": {},
      +            "description": "The terms the order was made on, read at asOf; cancel says whether it can be cancelled now.",
      +            "properties": {
      +              "asOf": {
      +                "description": "When these terms were read: status and penalties are as of this time.",
      +                "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                "type": "string"
      +              },
      +              "freeCancellationEndsAt": {
      +                "anyOf": [
      +                  {
      +                    "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "penalties": {
      +                "items": {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "amount": {
      +                      "additionalProperties": {},
      +                      "properties": {
      +                        "amount": {
      +                          "pattern": "^\\d+(\\.\\d+)?$",
      +                          "type": "string"
      +                        },
      +                        "currency": {
      +                          "pattern": "^[A-Z]{3}$",
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "amount",
      +                        "currency"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "startsAt": {
      +                      "anyOf": [
      +                        {
      +                          "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "startsAt",
      +                    "amount"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "status": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "free",
      +                      "partial_penalty",
      +                      "non_refundable",
      +                      "unknown"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              "timeZone": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "status",
      +              "asOf",
      +              "freeCancellationEndsAt",
      +              "penalties",
      +              "timeZone"
      +            ],
      +            "type": "object"
      +          },
      +          "checkIn": {
      +            "type": "string"
      +          },
      +          "checkOut": {
      +            "type": "string"
      +          },
      +          "confirmationNumber": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "hotelId": {
      +            "anyOf": [
      +              {
      +                "pattern": "^htl_[0-9A-Za-z]{20}$",
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "meals": {
      +            "additionalProperties": {},
      +            "description": "What the rate includes to eat. known false: the meals are unknown, not none, and included, unspecifiedMainMeals and allInclusive are null.",
      +            "properties": {
      +              "allInclusive": {
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "guestsCoveredPerRoom": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "How many guests in each room the meals are for; fewer than the guests in the room means not everyone gets them. null when not stated."
      +              },
      +              "included": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "anyOf": [
      +                        {
      +                          "enum": [
      +                            "breakfast",
      +                            "lunch",
      +                            "dinner"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "string"
      +                        }
      +                      ]
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "known": {
      +                "type": "boolean"
      +              },
      +              "label": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {},
      +                    "properties": {
      +                      "locale": {
      +                        "anyOf": [
      +                          {
      +                            "anyOf": [
      +                              {
      +                                "enum": [
      +                                  "en",
      +                                  "zh"
      +                                ],
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "string"
      +                              }
      +                            ]
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "text",
      +                      "locale"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "unspecifiedMainMeals": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Main meals a day beyond included that the rate doesn't name (e.g. 1 when a half-board rate doesn't say lunch or dinner); null when known is false."
      +              }
      +            },
      +            "required": [
      +              "known",
      +              "included",
      +              "unspecifiedMainMeals",
      +              "allInclusive",
      +              "guestsCoveredPerRoom",
      +              "label"
      +            ],
      +            "type": "object"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "names": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "en": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "zh": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "en",
      +              "zh"
      +            ],
      +            "type": "object"
      +          },
      +          "payAtProperty": {
      +            "additionalProperties": {},
      +            "description": "Fees paid at the property, on top of price.total, in the property's currency, not converted. disclosure incomplete: there may be fees not listed.",
      +            "properties": {
      +              "disclosure": {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "complete",
      +                      "incomplete"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              "items": {
      +                "items": {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "amount": {
      +                      "anyOf": [
      +                        {
      +                          "additionalProperties": {},
      +                          "properties": {
      +                            "amount": {
      +                              "pattern": "^\\d+(\\.\\d+)?$",
      +                              "type": "string"
      +                            },
      +                            "currency": {
      +                              "pattern": "^[A-Z]{3}$",
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "amount",
      +                            "currency"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    },
      +                    "basis": {
      +                      "anyOf": [
      +                        {
      +                          "enum": [
      +                            "per_stay",
      +                            "per_night",
      +                            "per_person",
      +                            "per_person_per_night",
      +                            "unknown"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "string"
      +                        }
      +                      ]
      +                    },
      +                    "collectedAt": {
      +                      "anyOf": [
      +                        {
      +                          "enum": [
      +                            "property",
      +                            "unknown"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        {
      +                          "type": "string"
      +                        }
      +                      ]
      +                    },
      +                    "label": {
      +                      "anyOf": [
      +                        {
      +                          "additionalProperties": {},
      +                          "properties": {
      +                            "locale": {
      +                              "anyOf": [
      +                                {
      +                                  "anyOf": [
      +                                    {
      +                                      "enum": [
      +                                        "en",
      +                                        "zh"
      +                                      ],
      +                                      "type": "string"
      +                                    },
      +                                    {
      +                                      "type": "string"
      +                                    }
      +                                  ]
      +                                },
      +                                {
      +                                  "type": "null"
      +                                }
      +                              ]
      +                            },
      +                            "text": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "required": [
      +                            "text",
      +                            "locale"
      +                          ],
      +                          "type": "object"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    },
      +                    "mandatory": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "label",
      +                    "amount",
      +                    "mandatory",
      +                    "basis",
      +                    "collectedAt"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "disclosure",
      +              "items"
      +            ],
      +            "type": "object"
      +          },
      +          "room": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "beds": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {},
      +                    "properties": {
      +                      "locale": {
      +                        "anyOf": [
      +                          {
      +                            "anyOf": [
      +                              {
      +                                "enum": [
      +                                  "en",
      +                                  "zh"
      +                                ],
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "string"
      +                              }
      +                            ]
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "text",
      +                      "locale"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "name": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": {},
      +                    "properties": {
      +                      "locale": {
      +                        "anyOf": [
      +                          {
      +                            "anyOf": [
      +                              {
      +                                "enum": [
      +                                  "en",
      +                                  "zh"
      +                                ],
      +                                "type": "string"
      +                              },
      +                              {
      +                                "type": "string"
      +                              }
      +                            ]
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "text": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "text",
      +                      "locale"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "beds"
      +            ],
      +            "type": "object"
      +          },
      +          "rooms": {
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "adults": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                },
      +                "childrenAges": {
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "type": "array"
      +                }
      +              },
      +              "required": [
      +                "adults",
      +                "childrenAges"
      +              ],
      +              "type": "object"
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "timeZone": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "hotelId",
      +          "name",
      +          "names",
      +          "checkIn",
      +          "checkOut",
      +          "timeZone",
      +          "rooms",
      +          "room",
      +          "meals",
      +          "cancellation",
      +          "payAtProperty",
      +          "confirmationNumber"
      +        ],
      +        "type": "object"
      +      },
      +      "type": {
      +        "const": "hotel",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "hotel"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedOutput schema / properties / payment / properties / chargeCurrency / description
      Added value: +"USD or CNY: the currency of the offer the order was made from. An order made on the Fortrip website may be in another currency."
    • removedOutput schema / properties / payment / properties / credentialLimits
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": {},
      -      "properties": {
      -        "currency": {
      -          "description": "The token's currency, lowercase as Stripe takes it: usd.",
      -          "type": "string"
      -        },
      -        "expiresAt": {
      -          "description": "Request the token valid until at least this time; the order can't be paid after it.",
      -          "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -          "type": "string"
      -        },
      -        "maxAmount": {
      -          "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "maxAmount",
      -        "currency",
      -        "expiresAt"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "What the shared payment token for pay_order must allow. null exactly when handlers is []."
      -}
    • addedOutput schema / properties / payment / properties / expiresAt / description
      Added value: +"When the time to pay ends: an order unpaid by then expires, with nothing charged. null unless status is awaiting_payment."
    • removedOutput schema / properties / payment / properties / handlers
      Removed value: -{
      -  "description": "The ways to pay other than url: a com.stripe.payments handler takes a Stripe shared payment token through pay_order. [] when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, or token payment isn't offered for this order.",
      -  "items": {
      -    "additionalProperties": {},
      -    "properties": {
      -      "available_instruments": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "config": {
      -              "additionalProperties": {},
      -              "propertyNames": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            "type": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "config": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "business_profile": {
      -            "type": "string"
      -          },
      -          "environment": {
      -            "anyOf": [
      -              {
      -                "enum": [
      -                  "livemode",
      -                  "testmode"
      -                ],
      -                "type": "string"
      -              },
      -              {
      -                "type": "string"
      -              }
      -            ]
      -          }
      -        },
      -        "required": [
      -          "environment",
      -          "business_profile"
      -        ],
      -        "type": "object"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "schema": {
      -        "type": "string"
      -      },
      -      "spec": {
      -        "type": "string"
      -      },
      -      "type": {
      -        "type": "string"
      -      },
      -      "version": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "type",
      -      "version",
      -      "spec",
      -      "schema",
      -      "available_instruments",
      -      "config"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / payment / properties / localCharge / description
      Added value: +"What the card was charged in its own currency, when Stripe converted the total; otherwise null. Always null on a CNY order."
    • addedOutput schema / properties / payment / properties / localCurrencyAtCheckout / description
      Added value: +"Whether paying by url may charge the card in its own currency, converted by Stripe; false once paid by token, Alipay or WeChat Pay; always false on a CNY order."
    • addedOutput schema / properties / payment / properties / methods
      Added value: +{
      +  "description": "What pay_order accepts for this order now, by id. [] means: give the user payment.url, when it isn't null.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": {},
      +        "description": "A Stripe shared payment token, through pay_order's sharedPaymentToken or payment. The entry is absent when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, an Alipay or WeChat Pay payment is open, or token payment isn't offered for this order.",
      +        "properties": {
      +          "handler": {
      +            "additionalProperties": {},
      +            "description": "The com.stripe.payments handler, which takes the token.",
      +            "properties": {
      +              "available_instruments": {
      +                "items": {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "config": {
      +                      "additionalProperties": {},
      +                      "propertyNames": {
      +                        "type": "string"
      +                      },
      +                      "type": "object"
      +                    },
      +                    "type": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "type"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "config": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "business_profile": {
      +                    "type": "string"
      +                  },
      +                  "environment": {
      +                    "anyOf": [
      +                      {
      +                        "enum": [
      +                          "livemode",
      +                          "testmode"
      +                        ],
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "string"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "environment",
      +                  "business_profile"
      +                ],
      +                "type": "object"
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "schema": {
      +                "type": "string"
      +              },
      +              "spec": {
      +                "type": "string"
      +              },
      +              "type": {
      +                "type": "string"
      +              },
      +              "version": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "type",
      +              "version",
      +              "spec",
      +              "schema",
      +              "available_instruments",
      +              "config"
      +            ],
      +            "type": "object"
      +          },
      +          "id": {
      +            "const": "stripe_shared_payment_token",
      +            "type": "string"
      +          },
      +          "limits": {
      +            "additionalProperties": {},
      +            "description": "What the shared payment token for pay_order must allow.",
      +            "properties": {
      +              "currency": {
      +                "description": "The token's currency, lowercase as Stripe takes it: usd.",
      +                "type": "string"
      +              },
      +              "expiresAt": {
      +                "description": "Request the token valid until at least this time; the order can't be paid after it.",
      +                "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +                "type": "string"
      +              },
      +              "maxAmount": {
      +                "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "maxAmount",
      +              "currency",
      +              "expiresAt"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "handler",
      +          "limits"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": {},
      +        "description": "Paying with Alipay or WeChat Pay: pass method stripe_alipay_wechat_pay to pay_order to open it. The entry is absent when the order can't be paid this way and none is open, as on a CNY order.",
      +        "properties": {
      +          "alipay": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "url": {
      +                    "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "url"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The Alipay link; null until the payment is open."
      +          },
      +          "current": {
      +            "anyOf": [
      +              {
      +                "anyOf": [
      +                  {
      +                    "enum": [
      +                      "wechat_pay",
      +                      "alipay"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Which of the two the payment is on now; null until it is open."
      +          },
      +          "id": {
      +            "const": "stripe_alipay_wechat_pay",
      +            "type": "string"
      +          },
      +          "open": {
      +            "description": "Whether pay_order has opened an Alipay or WeChat Pay payment on this order.",
      +            "type": "boolean"
      +          },
      +          "wechatPay": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "qrData": {
      +                    "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "qrImageUrl": {
      +                    "description": "A 480 px PNG of the same code.",
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "url": {
      +                    "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "qrData",
      +                  "qrImageUrl",
      +                  "url"
      +                ],
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The WeChat Pay code and link; null until the payment is open."
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "open",
      +          "current",
      +          "wechatPay",
      +          "alipay"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": {},
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / payment / properties / url / description
      Previous value: -"The payment page, on fortrip.ai. With requiresSignIn false it continues to Stripe Checkout, and anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null when the order isn't awaiting payment, or, while it is, when the link couldn't be read this time: read the order again."New value: +"The payment page, on fortrip.ai; it continues to the payment provider. With requiresSignIn false anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null while a payment is held (authorized) or when the order isn't awaiting payment, or, while it is and its payment is unpaid, when the link couldn't be read this time: read the order again."
    • removedOutput schema / properties / payment / properties / wallets
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": {},
      -      "properties": {
      -        "alipay": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": {},
      -              "properties": {
      -                "url": {
      -                  "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "url"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "The Alipay link; null until the payment is open."
      -        },
      -        "current": {
      -          "anyOf": [
      -            {
      -              "anyOf": [
      -                {
      -                  "enum": [
      -                    "wechat_pay",
      -                    "alipay"
      -                  ],
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "string"
      -                }
      -              ]
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "The wallet the payment is on now; null until it is open."
      -        },
      -        "open": {
      -          "description": "Whether pay_order has opened a wallet payment on this order.",
      -          "type": "boolean"
      -        },
      -        "wechatPay": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": {},
      -              "properties": {
      -                "qrData": {
      -                  "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "qrImageUrl": {
      -                  "description": "A 480 px PNG of the same code.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "url": {
      -                  "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "qrData",
      -                "qrImageUrl",
      -                "url"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "description": "The WeChat Pay code and link; null until the payment is open."
      -        }
      -      },
      -      "required": [
      -        "open",
      -        "current",
      -        "wechatPay",
      -        "alipay"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "Paying with Alipay or WeChat Pay: pass method alipay_wechat_pay to pay_order to open it. null when the order can't be paid this way and none is open."
      -}
    • changedOutput schema / properties / payment / required
      Previous value: -[
      -  "status",
      -  "url",
      -  "requiresSignIn",
      -  "expiresAt",
      -  "chargeCurrency",
      -  "localCurrencyAtCheckout",
      -  "localCharge",
      -  "handlers",
      -  "credentialLimits",
      -  "wallets"
      -]New value: +[
      +  "status",
      +  "url",
      +  "requiresSignIn",
      +  "expiresAt",
      +  "chargeCurrency",
      +  "localCurrencyAtCheckout",
      +  "localCharge",
      +  "methods"
      +]
    • addedOutput schema / properties / price / properties / total / description
      Added value: +"The whole stay for all rooms, in payment.chargeCurrency: what paying charges, or once paid what was charged. Fees payable at the property are not in it."
    • addedOutput schema / properties / status / description
      Added value: +"awaiting_payment: unpaid, nothing charged; payable until payment.expiresAt. expired: not paid; the time ran out or the order was closed. Nothing charged. confirming: paid or held, the booking is with the hotel. confirmed: the hotel confirmed and the payment is charged. failed: no stay was booked; payment.status says what became of the money. cancelling, then cancelled: a cancellation under the terms. needs_attention: a person at Fortrip has to resolve it."
  3. Changed2 schema fields changed
    • addedOutput schema / properties / payment / properties / wallets
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "alipay": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {
      +                "url": {
      +                  "description": "A link, on fortrip.ai, for the user to pay with Alipay; anyone holding it can pay.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The Alipay link; null until the payment is open."
      +        },
      +        "current": {
      +          "anyOf": [
      +            {
      +              "anyOf": [
      +                {
      +                  "enum": [
      +                    "wechat_pay",
      +                    "alipay"
      +                  ],
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "string"
      +                }
      +              ]
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The wallet the payment is on now; null until it is open."
      +        },
      +        "open": {
      +          "description": "Whether pay_order has opened a wallet payment on this order.",
      +          "type": "boolean"
      +        },
      +        "wechatPay": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {
      +                "qrData": {
      +                  "description": "The WeChat Pay code's content, to draw as a QR code; null when there is no live code (open wechatPay.url for one).",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "qrImageUrl": {
      +                  "description": "A 480 px PNG of the same code.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "url": {
      +                  "description": "A link, on fortrip.ai, for the user to pay with WeChat Pay; anyone holding it can pay.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "qrData",
      +                "qrImageUrl",
      +                "url"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The WeChat Pay code and link; null until the payment is open."
      +        }
      +      },
      +      "required": [
      +        "open",
      +        "current",
      +        "wechatPay",
      +        "alipay"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Paying with Alipay or WeChat Pay: pass method alipay_wechat_pay to pay_order to open it. null when the order can't be paid this way and none is open."
      +}
    • changedOutput schema / properties / payment / required
      Previous value: -[
      -  "status",
      -  "url",
      -  "requiresSignIn",
      -  "expiresAt",
      -  "chargeCurrency",
      -  "localCurrencyAtCheckout",
      -  "localCharge",
      -  "handlers",
      -  "credentialLimits"
      -]New value: +[
      +  "status",
      +  "url",
      +  "requiresSignIn",
      +  "expiresAt",
      +  "chargeCurrency",
      +  "localCurrencyAtCheckout",
      +  "localCharge",
      +  "handlers",
      +  "credentialLimits",
      +  "wallets"
      +]
  4. Changed10 schema fields changed
    • changedInput schema / properties / items / description
      Previous value: -"The offer to book. Exactly one in v1."New value: +"The offer to book: exactly one."
    • addedOutput schema / properties / cancel / description
      Added value: +"Whether the order can be cancelled now, and for what penalty and refund."
    • addedOutput schema / properties / cancel / properties / available / description
      Added value: +"Whether the user can cancel the order now."
    • addedOutput schema / properties / cancel / properties / penalty / description
      Added value: +"The penalty if cancelled now, under the accepted terms, in the charge currency; null when not stated."
    • addedOutput schema / properties / cancel / properties / reason / description
      Added value: +"cancellable when it can be cancelled now; otherwise why not."
    • addedOutput schema / properties / cancel / properties / refund / description
      Added value: +"What a cancellation now refunds: what was paid less the penalty, in the charge currency; null when not stated."
    • changedOutput schema / properties / payment / properties / credentialLimits / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "currency": {
      -        "type": "string"
      -      },
      -      "expiresAt": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -        "type": "string"
      -      },
      -      "maxAmount": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "maxAmount",
      -      "currency",
      -      "expiresAt"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "currency": {
      +        "description": "The token's currency, lowercase as Stripe takes it: usd.",
      +        "type": "string"
      +      },
      +      "expiresAt": {
      +        "description": "Request the token valid until at least this time; the order can't be paid after it.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +        "type": "string"
      +      },
      +      "maxAmount": {
      +        "description": "Request the token for at least this amount, in cents; a token that allows less can't pay.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "maxAmount",
      +      "currency",
      +      "expiresAt"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / payment / properties / credentialLimits / description
      Added value: +"What the shared payment token for pay_order must allow. null exactly when handlers is []."
    • addedOutput schema / properties / payment / properties / handlers / description
      Added value: +"The ways to pay other than url: a com.stripe.payments handler takes a Stripe shared payment token through pay_order. [] when a token can't pay the order: over $500, not charged in USD, an order started on the Fortrip website, a negotiated price, under 15 minutes left, 5 tokens tried, a token payment is under way, or token payment isn't offered for this order."
    • addedOutput schema / properties / payment / properties / url / description
      Added value: +"The payment page, on fortrip.ai. With requiresSignIn false it continues to Stripe Checkout, and anyone holding it can pay; with requiresSignIn true (an order started on the Fortrip website) it continues to the Fortrip booking page, where only the signed-in owner can pay. null when the order isn't awaiting payment, or, while it is, when the link couldn't be read this time: read the order again."
  5. Changed12 schema fields changed
    • removedOutput schema / properties / payment / properties / credentialLimits / additionalProperties
      Removed value: -{}
    • addedOutput schema / properties / payment / properties / credentialLimits / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "currency": {
      +        "type": "string"
      +      },
      +      "expiresAt": {
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +        "type": "string"
      +      },
      +      "maxAmount": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "maxAmount",
      +      "currency",
      +      "expiresAt"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / payment / properties / credentialLimits / properties
      Removed value: -{
      -  "currency": {
      -    "type": "string"
      -  },
      -  "expiresAt": {
      -    "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      -    "type": "string"
      -  },
      -  "maxAmount": {
      -    "maximum": 9007199254740991,
      -    "minimum": -9007199254740991,
      -    "type": "integer"
      -  }
      -}
    • removedOutput schema / properties / payment / properties / credentialLimits / required
      Removed value: -[
      -  "maxAmount",
      -  "currency",
      -  "expiresAt"
      -]
    • removedOutput schema / properties / payment / properties / credentialLimits / type
      Removed value: -"object"
    • addedOutput schema / properties / payment / properties / handlers / items / properties / available_instruments
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "config": {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / payment / properties / handlers / items / properties / config
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "business_profile": {
      +      "type": "string"
      +    },
      +    "environment": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "livemode",
      +            "testmode"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "string"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "environment",
      +    "business_profile"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / payment / properties / handlers / items / properties / networkId
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / payment / properties / handlers / items / properties / schema
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / payment / properties / handlers / items / required
      Previous value: -[
      -  "id",
      -  "type",
      -  "version",
      -  "spec",
      -  "networkId"
      -]New value: +[
      +  "id",
      +  "type",
      +  "version",
      +  "spec",
      +  "schema",
      +  "available_instruments",
      +  "config"
      +]
    • changedOutput schema / properties / payment / required
      Previous value: -[
      -  "status",
      -  "url",
      -  "requiresSignIn",
      -  "expiresAt",
      -  "chargeCurrency",
      -  "localCurrencyAtCheckout",
      -  "localCharge"
      -]New value: +[
      +  "status",
      +  "url",
      +  "requiresSignIn",
      +  "expiresAt",
      +  "chargeCurrency",
      +  "localCurrencyAtCheckout",
      +  "localCharge",
      +  "handlers",
      +  "credentialLimits"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "orderId",
      -  "reference",
      -  "status",
      -  "createdAt",
      -  "updatedAt",
      -  "items",
      -  "price",
      -  "payment",
      -  "manageUrl"
      -]New value: +[
      +  "orderId",
      +  "reference",
      +  "status",
      +  "createdAt",
      +  "updatedAt",
      +  "items",
      +  "price",
      +  "payment",
      +  "cancel",
      +  "manageUrl"
      +]
  6. Changed2 schema fields changed
    • addedOutput schema / properties / payment / properties / credentialLimits
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "currency": {
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +      "type": "string"
      +    },
      +    "maxAmount": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "maxAmount",
      +    "currency",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / payment / properties / handlers
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "networkId": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "spec": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "type": "string"
      +      },
      +      "version": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "type",
      +      "version",
      +      "spec",
      +      "networkId"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / cancel
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "available": {
      +      "type": "boolean"
      +    },
      +    "penalty": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "amount": {
      +              "pattern": "^\\d+(\\.\\d+)?$",
      +              "type": "string"
      +            },
      +            "currency": {
      +              "pattern": "^[A-Z]{3}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "amount",
      +            "currency"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "reason": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "cancellable",
      +            "already_cancelled",
      +            "in_progress",
      +            "not_confirmed",
      +            "stay_started",
      +            "non_refundable",
      +            "refused",
      +            "terms_unknown",
      +            "needs_attention"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "string"
      +        }
      +      ]
      +    },
      +    "refund": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "amount": {
      +              "pattern": "^\\d+(\\.\\d+)?$",
      +              "type": "string"
      +            },
      +            "currency": {
      +              "pattern": "^[A-Z]{3}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "amount",
      +            "currency"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "available",
      +    "reason",
      +    "penalty",
      +    "refund"
      +  ],
      +  "type": "object"
      +}
  8. Changed36 schema fields changed
    • removedInput schema / properties / adults
      Removed value: -{
      -  "description": "Adults per room, not in total, as in get_hotel_rates (2 rooms for 4 adults = rooms 2, adults 2)",
      -  "maximum": 8,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / checkIn
      Removed value: -{
      -  "description": "Check-in date, yyyy-MM-dd.",
      -  "type": "string"
      -}
    • removedInput schema / properties / checkOut
      Removed value: -{
      -  "description": "Check-out date, yyyy-MM-dd. Stays are 1 to 15 nights.",
      -  "type": "string"
      -}
    • removedInput schema / properties / childrenAges
      Removed value: -{
      -  "default": [],
      -  "description": "Age of each child in one room (0-17), per room, as in get_hotel_rates",
      -  "items": {
      -    "maximum": 17,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "maxItems": 8,
      -  "type": "array"
      -}
    • addedInput schema / properties / contact
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Who the hotel and the confirmation reach.",
      +  "properties": {
      +    "email": {
      +      "description": "Contact email; the confirmation is sent here.",
      +      "type": "string"
      +    },
      +    "firstName": {
      +      "description": "Contact person's first name, at most 59 characters.",
      +      "type": "string"
      +    },
      +    "lastName": {
      +      "description": "Contact person's last name, at most 59 characters.",
      +      "type": "string"
      +    },
      +    "phone": {
      +      "description": "Contact phone number, with country code.",
      +      "maxLength": 40,
      +      "minLength": 3,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "firstName",
      +    "lastName",
      +    "email",
      +    "phone"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / contactEmail
      Removed value: -{
      -  "description": "Contact email.",
      -  "type": "string"
      -}
    • removedInput schema / properties / contactName
      Removed value: -{
      -  "description": "Contact person for the booking.",
      -  "maxLength": 120,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / contactPhone
      Removed value: -{
      -  "description": "Contact phone number.",
      -  "maxLength": 40,
      -  "minLength": 3,
      -  "type": "string"
      -}
    • removedInput schema / properties / guests
      Removed value: -{
      -  "description": "At least one guest per room, no more than the room sleeps. Names in Latin letters as on the passport; transliterate accents (Müller → Mueller).",
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "firstName": {
      -        "description": "First name.",
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "lastName": {
      -        "description": "Last name.",
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "roomNo": {
      -        "description": "Room the guest stays in, starting at 1.",
      -        "maximum": 8,
      -        "minimum": 1,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "firstName",
      -      "lastName",
      -      "roomNo"
      -    ],
      -    "type": "object"
      -  },
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / properties / hotelId
      Removed value: -{
      -  "description": "Hotel id.",
      -  "exclusiveMinimum": 0,
      -  "maximum": 9007199254740991,
      -  "type": "integer"
      -}
    • addedInput schema / properties / items
      Added value: +{
      +  "description": "The offer to book. Exactly one in v1.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "hotel": {
      +        "additionalProperties": false,
      +        "description": "What the hotel needs to know.",
      +        "properties": {
      +          "rooms": {
      +            "description": "One entry per room of the offer, in order.",
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "guests": {
      +                  "description": "Guests staying in this room: at least one, no more than the room sleeps.",
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "firstName": {
      +                        "description": "Guest's first name, in Latin letters as on the passport; transliterate accents (Müller → Mueller).",
      +                        "maxLength": 60,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "lastName": {
      +                        "description": "Guest's last name, in Latin letters as on the passport.",
      +                        "maxLength": 60,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "firstName",
      +                      "lastName"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "maxItems": 12,
      +                  "minItems": 1,
      +                  "type": "array"
      +                }
      +              },
      +              "required": [
      +                "guests"
      +              ],
      +              "type": "object"
      +            },
      +            "maxItems": 8,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "specialRequests": {
      +            "description": "Requests for the hotel, in English. Not guaranteed.",
      +            "maxLength": 500,
      +            "minLength": 0,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "rooms"
      +        ],
      +        "type": "object"
      +      },
      +      "offerId": {
      +        "description": "offerId from an offers response.",
      +        "pattern": "^off_[0-9A-Za-z]{20}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "offerId",
      +      "hotel"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 1,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • removedInput schema / properties / ratePlanCode
      Removed value: -{
      -  "description": "ratePlanCode from get_hotel_rates",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / roomId
      Removed value: -{
      -  "description": "roomId from get_hotel_rates",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / rooms
      Removed value: -{
      -  "description": "Number of rooms, as in get_hotel_rates; every room has the same occupancy",
      -  "maximum": 8,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / specialRequests
      Removed value: -{
      -  "description": "Requests for the hotel, in English. Not guaranteed.",
      -  "maxLength": 500,
      -  "minLength": 0,
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "hotelId",
      -  "roomId",
      -  "ratePlanCode",
      -  "checkIn",
      -  "checkOut",
      -  "rooms",
      -  "adults",
      -  "guests",
      -  "contactName",
      -  "contactPhone"
      -]New value: +[
      +  "contact",
      +  "items"
      +]
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
    • removedOutput schema / properties / agentOrderId
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / amount
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "number"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "What the user will be charged, in currency"
      -}
    • addedOutput schema / properties / createdAt
      Added value: +{
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +  "type": "string"
      +}
    • removedOutput schema / properties / currency
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / items
      Added value: +{
      +  "items": {
      +    "anyOf": [
      +      {
      +        "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"
      +      }
      +    ]
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedOutput schema / properties / manageUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / nextStep / description
      Added value: +"What to show and ask before giving a payment.url. Present when the answer holds a non-null payment.url, and only then."
    • addedOutput schema / properties / orderId
      Added value: +{
      +  "pattern": "^ord_[0-9A-Za-z]{20}$",
      +  "type": "string"
      +}
    • removedOutput schema / properties / orderUrl
      Removed value: -{
      -  "description": "The signed-in order page",
      -  "type": "string"
      -}
    • addedOutput schema / properties / payment
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "chargeCurrency": {
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "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"
      +        }
      +      ]
      +    },
      +    "localCharge": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "amount": {
      +              "pattern": "^\\d+(\\.\\d+)?$",
      +              "type": "string"
      +            },
      +            "currency": {
      +              "pattern": "^[A-Z]{3}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "amount",
      +            "currency"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "localCurrencyAtCheckout": {
      +      "type": "boolean"
      +    },
      +    "requiresSignIn": {
      +      "type": "boolean"
      +    },
      +    "status": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "unpaid",
      +            "authorized",
      +            "paid",
      +            "released",
      +            "refund_pending",
      +            "refunded"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "string"
      +        }
      +      ]
      +    },
      +    "url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "url",
      +    "requiresSignIn",
      +    "expiresAt",
      +    "chargeCurrency",
      +    "localCurrencyAtCheckout",
      +    "localCharge"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / paymentUrl
      Removed value: -{
      -  "description": "Fortrip page that recaps the booking and continues to payment. Anyone holding it can pay",
      -  "type": "string"
      -}
    • addedOutput schema / properties / price
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "total": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "amount": {
      +          "pattern": "^\\d+(\\.\\d+)?$",
      +          "type": "string"
      +        },
      +        "currency": {
      +          "pattern": "^[A-Z]{3}$",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "amount",
      +        "currency"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "total"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / reference
      Added value: +{
      +  "pattern": "^FT-[2-9A-HJ-NP-Z]{6}$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "awaiting_payment",
      +        "expired",
      +        "confirming",
      +        "confirmed",
      +        "failed",
      +        "cancelling",
      +        "cancelled",
      +        "needs_attention"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "string"
      +    }
      +  ]
      +}
    • removedOutput schema / properties / statusUrl
      Removed value: -{
      -  "description": "The booking status page; the same page as paymentUrl",
      -  "type": "string"
      -}
    • removedOutput schema / properties / stay
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "The stay as booked; every room has the same occupancy",
      -  "properties": {
      -    "adultsPerRoom": {
      -      "type": "number"
      -    },
      -    "checkIn": {
      -      "type": "string"
      -    },
      -    "checkOut": {
      -      "type": "string"
      -    },
      -    "childrenAgesPerRoom": {
      -      "items": {
      -        "type": "number"
      -      },
      -      "type": "array"
      -    },
      -    "hotelId": {
      -      "type": "number"
      -    },
      -    "hotelName": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "nights": {
      -      "type": "number"
      -    },
      -    "roomName": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "rooms": {
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "hotelId",
      -    "hotelName",
      -    "roomName",
      -    "checkIn",
      -    "checkOut",
      -    "nights",
      -    "rooms",
      -    "adultsPerRoom",
      -    "childrenAgesPerRoom"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / terms
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": false,
      -      "properties": {
      -        "boardCode": {
      -          "type": "string"
      -        },
      -        "boardCount": {
      -          "type": "number"
      -        },
      -        "cancellation": {
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "amount": {
      -                "type": "number"
      -              },
      -              "from": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "amount",
      -              "from"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "confirmByMins": {
      -          "anyOf": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "freeCancelUntil": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "isInstantConfirm": {
      -          "type": "boolean"
      -        },
      -        "payAtHotelFees": {
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "amount": {
      -                "type": "number"
      -              },
      -              "currency": {
      -                "type": "string"
      -              },
      -              "isMandatory": {
      -                "type": "boolean"
      -              },
      -              "type": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "type",
      -              "isMandatory",
      -              "amount",
      -              "currency"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "refundable": {
      -          "type": "boolean"
      -        }
      -      },
      -      "required": [
      -        "boardCode",
      -        "boardCount",
      -        "refundable",
      -        "freeCancelUntil",
      -        "cancellation",
      -        "isInstantConfirm",
      -        "confirmByMins",
      -        "payAtHotelFees"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • addedOutput schema / properties / updatedAt
      Added value: +{
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z$",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "agentOrderId",
      -  "paymentUrl",
      -  "amount",
      -  "currency",
      -  "orderUrl",
      -  "stay",
      -  "terms",
      -  "nextStep"
      -]New value: +[
      +  "orderId",
      +  "reference",
      +  "status",
      +  "createdAt",
      +  "updatedAt",
      +  "items",
      +  "price",
      +  "payment",
      +  "manageUrl"
      +]
  9. Added

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only mark the call as non-read-only, open-world, and non-destructive; the description goes far beyond that by disclosing that the result is an unpaid order with a payment link, that nothing is charged until payment, that anyone holding the link can pay, and how an offer_changed response must be surfaced before re-ordering. It also explains the offer-expiry consequence when a new offer replaces an unpaid order — context the annotations cannot carry. The only tension is with idempotentHint=false, since "sending the same details again returns the same order" reads as effectively idempotent; I treat this as a soft mismatch rather than a contradiction, because the description consistently frames the outcome as one order per offer.

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

Conciseness4/5

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

The purpose and the unpaid-order outcome are front-loaded, and the remaining sentences cover distinct, load-bearing cases (offer_changed, duplicate submission, re-ordering, cancellation). It is dense and long for a tool description, with the cancellation/email clause trailing, but no sentence is filler.

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

Completeness5/5

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

For a two-parameter but deeply nested mutation, the description covers the success shape, the payment semantics, the stale-offer error path, duplicate submissions, and escalation to human support. Nothing an agent needs to call this safely and handle its responses is missing, even though an output schema exists.

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

Parameters3/5

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

Schema description coverage is 100% and the nested guest/room/contact fields already carry detailed descriptions, including name transliteration and room-sleep limits. The description's parameter guidance ("send the contact and, for each room of the offer, at least one guest") largely restates what the schema says, so the baseline of 3 applies.

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?

"Order one offer from get_hotel_offers" names the specific verb (order), the resource (an offer), and the exact sibling that produces the input. It is immediately distinguishable from get_hotel_offers, pay_order, and cancel_order, and the singular "one offer" matches the schema's maxItems:1.

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

Usage Guidelines5/5

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

It gives explicit routing for adjacent needs: cancel via cancel_order, and email info@fortrip.ai for changes or a cancellation cancel_order can't make. It also states the retry path for a different party or corrected guest name (re-fetch offers rather than re-using the offerId) and the re-confirmation loop when the price changes.

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