changedOutput schema / oneOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "bookingKey": {
- "type": "string"
- },
- "bookingReference": {
- "type": "string"
- },
- "entries": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "id": {
- "type": "string"
- },
- "kind": {
- "enum": [
- "offer_recorded",
- "amendment_preparation_recorded",
- "amendment_recorded",
- "cancellation_requested",
- "cancellation_outcome_recorded"
- ],
- "type": "string"
- },
- "occurredAt": {
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
- "type": "string"
- }
- },
- "required": [
- "id",
- "occurredAt",
- "kind"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "nextAction": {
- "type": "string"
- },
- "nextCursor": {
- "anyOf": [
- {
- "additionalProperties": false,
- "properties": {
- "id": {
- "description": "Exact ID from nextCursor for stable ordering of events at the same timestamp; it grants no access.",
- "maxLength": 256,
- "minLength": 1,
- "type": "string"
- },
- "occurredAt": {
- "description": "Exact timestamp from the returned nextCursor; copy unchanged for older entries.",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
- "type": "string"
- }
- },
- "required": [
- "occurredAt",
- "id"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
- ]
- },
- "observedAt": {
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
- "type": "string"
- },
- "status": {
- "const": "available",
- "type": "string"
- }
- },
- "required": [
- "status",
- "bookingKey",
- "bookingReference",
- "observedAt",
- "entries",
- "nextCursor",
- "nextAction"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "status": {
- "const": "invalid_request",
- "type": "string"
- }
- },
- "required": [
- "status"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "status": {
- "const": "not_found",
- "type": "string"
- }
- },
- "required": [
- "status"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "status": {
- "const": "unavailable",
- "type": "string"
- }
- },
- "required": [
- "status"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "bookingKey": {
+ "description": "Internal reservation ID for the one booking selected by the current OAuth grant.",
+ "type": "string"
+ },
+ "bookingReference": {
+ "description": "Stored visible reference for this booking, falling back to its internal ID; not a supplier offerKey.",
+ "type": "string"
+ },
+ "entries": {
+ "description": "Recorded offer, amendment and cancellation entries, newest first and then id ascending for equal timestamps. Empty means no matching visible events.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "description": "Stable timeline-entry ID from a stored offer reference or booking event, not a booking ID or retry key.",
+ "type": "string"
+ },
+ "kind": {
+ "description": "Recorded event category: offer reference, amendment preparation, committed amendment, cancellation request or cancellation outcome. It is not a payment/refund or fulfillment history.",
+ "enum": [
+ "offer_recorded",
+ "amendment_preparation_recorded",
+ "amendment_recorded",
+ "cancellation_requested",
+ "cancellation_outcome_recorded"
+ ],
+ "type": "string"
+ },
+ "occurredAt": {
+ "description": "Recorded event timestamp in ISO 8601; used with id for stable pagination.",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "occurredAt",
+ "kind"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "nextAction": {
+ "description": "Read-only guidance to inspect booking status and bound action terms; reading history performs no booking action.",
+ "type": "string"
+ },
+ "nextCursor": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "description": "Exact ID from nextCursor for stable ordering of events at the same timestamp; it grants no access.",
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "occurredAt": {
+ "description": "Exact timestamp from the returned nextCursor; copy unchanged for older entries.",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "occurredAt",
+ "id"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Copy a non-null cursor unchanged into after for older entries. Null means no older page was observed; it grants no authority."
+ },
+ "observedAt": {
+ "description": "Observation cutoff for this read; only events recorded at or before this timestamp are returned. It is not the booking's last-update time or provider refresh.",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
+ "type": "string"
+ },
+ "status": {
+ "const": "available",
+ "description": "The selected booking's authorized recorded timeline was read successfully.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "status",
+ "bookingKey",
+ "bookingReference",
+ "observedAt",
+ "entries",
+ "nextCursor",
+ "nextAction"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "status": {
+ "const": "invalid_request",
+ "description": "Input or pagination cursor does not match this contract.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "status": {
+ "const": "not_found",
+ "description": "The selected booking is inaccessible under current authority, including authority lost during the read; absence is not proved.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "status": {
+ "const": "unavailable",
+ "description": "The timeline could not be read or validated safely; this does not mean the booking is missing.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "status"
+ ],
+ "type": "object"
+ }
+]