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