{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/checkoutpage-com/json-schema/checkoutpage-com-booking-schema.json",
  "title": "Booking",
  "x-generated": "2026-11-03",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/checkoutpage-com-openapi.yml#/components/schemas/Booking",
  "properties": {
    "abandonedCartEmailSentAt": {
      "description": "Timestamp of the most recent abandoned-cart recovery email, if applicable.",
      "format": "date-time",
      "type": [
        "string",
        "null"
      ]
    },
    "abandonedCartEmailStatus": {
      "description": "The status of the abandonment email sent for this charge.\n    `pending`: No email has been sent. Stays as pending if isAbandoned is false.\n    `first_sent`: The first abandonment email has been sent.\n    `second_sent`: The second abandonment email has been sent.\n    `third_sent`: The third abandonment email has been sent.\n    `skipped`: The abandonment email processed was skipped.",
      "enum": [
        "pending",
        "first_sent",
        "second_sent",
        "third_sent",
        "skipped",
        null
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "abandonmentStatus": {
      "description": "'abandoned': checkout was started but not completed and not recovered yet. 'recovered': was abandoned but the customer returned and paid. Absent when the charge is not an abandoned cart.",
      "enum": [
        "abandoned",
        "recovered",
        null
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "amount": {
      "description": "Total amount billed for the record, in the smallest currency unit.",
      "type": "number"
    },
    "amountDue": {
      "description": "Outstanding amount still due, in the smallest currency unit.",
      "type": "number"
    },
    "amountExcludingTax": {
      "description": "The total amount excluding tax.",
      "type": [
        "number",
        "null"
      ]
    },
    "amountPaid": {
      "description": "Amount collected toward `amount`, in the smallest currency unit. Refunded records retain their original `amountPaid` value; use `amountRefunded` to determine the refunded portion.",
      "type": "number"
    },
    "amountRefunded": {
      "description": "Total amount refunded, in the smallest currency unit. Present on all records and `0` when no refund has been issued. NOTE: For records created before 2026-01-22T06:43:28.000Z, some refunds may have incomplete metadata and show `amountRefunded: 0`.",
      "type": [
        "number",
        "null"
      ]
    },
    "amountUsd": {
      "description": "The total amount in USD. Calculated using the exchange rate at the time of the transaction.",
      "type": [
        "number",
        "null"
      ]
    },
    "archivedAt": {
      "description": "When the merchant archived this, hiding it from their default bookings list in the dashboard. Archiving changes nothing else: the payment, tickets and `orderStatus` stay as they were. Absent unless archived.",
      "type": "string"
    },
    "archivedBy": {
      "description": "The userId of the team member who archived this. Absent unless archived.",
      "type": "string"
    },
    "billing": {
      "description": "Billing details, including name, email, phone, and address.",
      "properties": {
        "address": {
          "description": "Billing address.",
          "properties": {
            "city": {
              "type": "string"
            },
            "country": {
              "type": "string"
            },
            "line1": {
              "type": "string"
            },
            "line2": {
              "type": "string"
            },
            "postalCode": {
              "type": "string"
            },
            "state": {
              "type": "string"
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "billingEmail": {
          "type": [
            "string",
            "null"
          ]
        },
        "companyName": {
          "type": [
            "string",
            "null"
          ]
        },
        "email": {
          "description": "Email from the billing details.",
          "type": [
            "string",
            "null"
          ]
        },
        "name": {
          "description": "Name from the billing details.",
          "type": [
            "string",
            "null"
          ]
        },
        "phone": {
          "description": "Phone number from the billing details.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "canceledAt": {
      "description": "The date this was canceled.",
      "type": "string"
    },
    "canceledBy": {
      "description": "The userId that canceled this. If this is a booking, tickets were canceled in addition.",
      "type": "string"
    },
    "canceledByApiKey": {
      "description": "ID of the API key that canceled this, when it was canceled through the seller API. The key may have been deleted since; `canceledByApiKeyName` keeps its name.",
      "type": [
        "string",
        "null"
      ]
    },
    "canceledByApiKeyName": {
      "description": "Name of the API key that canceled this, as it was at the time. Kept when the key is deleted later.",
      "type": [
        "string",
        "null"
      ]
    },
    "canceledReason": {
      "description": "The reason for the cancellation",
      "type": "string"
    },
    "clientIp": {
      "description": "Customer IP address.",
      "type": [
        "string",
        "null"
      ]
    },
    "complimentaryDiscountAmount": {
      "description": "On a complimentary booking, the discount that brought the total to 0, in the smallest currency unit. Equal to the pre-discount subtotal of the ticket lines. Absent otherwise.",
      "type": [
        "number",
        "null"
      ]
    },
    "coupon": {
      "description": "Coupon details when a coupon was applied. `amountOff` is the fixed discount configured on the coupon, `percentOff` is the configured percentage discount, and `discount` is the total discount actually applied to this record.",
      "properties": {
        "amountOff": {
          "description": "Fixed amount off configured on the coupon. Cannot be combined with `percentOff`.",
          "type": [
            "number",
            "null"
          ]
        },
        "code": {
          "description": "Coupon code.",
          "type": [
            "string",
            "null"
          ]
        },
        "discount": {
          "description": "Total discount actually applied to this record.",
          "type": [
            "number",
            "null"
          ]
        },
        "id": {
          "type": [
            "string",
            "null"
          ]
        },
        "label": {
          "description": "Coupon label.",
          "type": [
            "string",
            "null"
          ]
        },
        "percentOff": {
          "description": "Percentage off configured on the coupon. Cannot be combined with `amountOff`.",
          "type": [
            "number",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "createdAt": {
      "description": "ISO 8601 timestamp when this record was created.",
      "format": "date-time",
      "type": "string"
    },
    "currency": {
      "description": "Three-letter currency code.",
      "type": [
        "string",
        "null"
      ]
    },
    "customerEmail": {
      "description": "Customer's email address (e.g. `andrew@example.com`). Present on all records with a linked customer entity. Null on incomplete checkouts. Searchable via `search`",
      "type": [
        "string",
        "null"
      ]
    },
    "customerId": {
      "description": "Customer  ID.",
      "type": [
        "string",
        "null"
      ]
    },
    "customerName": {
      "description": "Customer full name. Searchable via `search`.",
      "type": [
        "string",
        "null"
      ]
    },
    "discount": {
      "properties": {
        "amount": {
          "description": "Total discount amount.",
          "type": [
            "number",
            "null"
          ]
        },
        "amountOff": {
          "description": "Fixed amount off the original price. Cannot be combined with `percentOff`.",
          "type": [
            "number",
            "null"
          ]
        },
        "maxQuantity": {
          "description": "Maximum quantity allowed for the discount.",
          "type": [
            "number",
            "null"
          ]
        },
        "minQuantity": {
          "description": "Minimum quantity required to be eligible for the discount.",
          "type": [
            "number",
            "null"
          ]
        },
        "percentOff": {
          "description": "Percentage off the original price. Cannot be combined with `amountOff`.",
          "type": [
            "number",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "dynamicPrice": {
      "description": "The dynamic price controlled by query params at checkout that overrides the default price configured on the page.",
      "type": [
        "number",
        "null"
      ]
    },
    "eventTitle": {
      "description": "Human-readable event name. (e.g. \"Future of AI Summit 2026\", \"Conference\"). Present on all records. Use this instead of `pageSlug` when presenting event information. Searchable via `search`",
      "type": [
        "string",
        "null"
      ]
    },
    "fees": {
      "description": "Array of fee objects.",
      "items": {
        "properties": {
          "amount": {
            "description": "Fee amount in the smallest currency unit. For a fee with both a percentage and a fixed amount, the sum of `percentageAmount` and `fixedAmount`.",
            "type": [
              "number",
              "null"
            ]
          },
          "fixedAmount": {
            "description": "The fixed part of `amount`, in the smallest currency unit, already multiplied by quantity or tickets when the fee multiplies. Only set on a fee with both a percentage and a fixed amount.",
            "type": [
              "number",
              "null"
            ]
          },
          "name": {
            "description": "Fee name.",
            "type": [
              "string",
              "null"
            ]
          },
          "percentage": {
            "description": "Fee percentage when applicable.",
            "type": [
              "number",
              "null"
            ]
          },
          "percentageAmount": {
            "description": "The part of `amount` from the percentage, in the smallest currency unit. Only set on a fee with both a percentage and a fixed amount. Can be 0, e.g. when a 100% coupon leaves nothing for the percentage to apply to.",
            "type": [
              "number",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "fields": {
      "description": "Submitted form field responses.",
      "items": {
        "properties": {
          "element": {
            "enum": [
              "checkbox",
              "quantity",
              "multiple-choice",
              "select",
              "multi-select",
              "po-number",
              "text",
              "textarea",
              "number",
              "date-time",
              "date",
              "time",
              "address",
              "email",
              "tax-id",
              "phone",
              "country",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "fieldId": {
            "description": "Unique field ID.",
            "type": [
              "string",
              "null"
            ]
          },
          "label": {
            "description": "Label shown for the field.",
            "type": [
              "string",
              "null"
            ]
          },
          "meta": {
            "additionalProperties": {},
            "type": [
              "object",
              "null"
            ]
          },
          "reference": {
            "description": "Reference key for the field.",
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "enum": [
              "",
              "company-name",
              "po-number",
              "name",
              "first-name",
              "last-name",
              "email",
              "billing-email",
              "phone",
              "address-line1",
              "address-city",
              "address-country",
              "address-line2",
              "address-postal_code",
              "address-state",
              "shipping-name",
              "shipping-phone",
              "shipping-address-line1",
              "shipping-address-city",
              "shipping-address-country",
              "shipping-address-line2",
              "shipping-address-postal_code",
              "shipping-address-state",
              "tax-id",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "description": "Submitted value for the field.",
            "type": [
              "string",
              "null"
            ]
          },
          "values": {
            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type.",
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "id": {
      "description": "Unique record ID. Use this for pagination cursors.",
      "type": "string"
    },
    "invoiceId": {
      "description": "Generated invoice ID when an invoice exists. This confirms that an invoice was created, but not that the invoice document itself is available here.",
      "type": [
        "string",
        "null"
      ]
    },
    "isAbandoned": {
      "description": "Whether the checkout flow was abandoned.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "isComplimentary": {
      "description": "Whether this is a complimentary booking: issued by the merchant at no charge, recorded as `paid` with `amount`, `amountPaid` and `amountDue` of 0 while the ticket lines keep their face value. Always false on payments.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "lastRefundAt": {
      "description": "Timestamp of the most recent refund action.",
      "format": "date-time",
      "type": [
        "string",
        "null"
      ]
    },
    "lastRefundReason": {
      "description": "Reason code for the most recent refund action.",
      "type": [
        "string",
        "null"
      ]
    },
    "lastRefundReasonNote": {
      "description": "Free-text note for the most recent refund action. Refund reason fields reflect only the most recent refund action, not the full refund history.",
      "type": [
        "string",
        "null"
      ]
    },
    "livemode": {
      "description": "Whether this is a real transaction.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "locale": {
      "description": "Customer's browser locale.",
      "type": [
        "string",
        "null"
      ]
    },
    "orderId": {
      "description": "Human-readable order number.",
      "type": [
        "string",
        "null"
      ]
    },
    "orderStatus": {
      "description": "Order lifecycle status. Valid values are active, canceled.",
      "enum": [
        "active",
        "canceled",
        null
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "pageId": {
      "description": "Checkout page ID.",
      "type": [
        "string",
        "null"
      ]
    },
    "pageSlug": {
      "description": "Page URL slug. This is a URL fragment, not a human-friendly title.",
      "type": [
        "string",
        "null"
      ]
    },
    "paymentError": {
      "description": "Last payment-specific error message. This field is not guaranteed to be set and persists after a later successful payment, so check `status` before interpreting `paymentError`.",
      "type": [
        "string",
        "null"
      ]
    },
    "paymentMethod": {
      "description": "Payment method details, such as `gateway`, `method`, `brand`, `last4`, `country`, and `funding`. This may be absent when a payment method was never initiated.",
      "properties": {
        "brand": {
          "description": "Payment method brand, such as visa or mastercard.",
          "type": "string"
        },
        "country": {
          "description": "Country associated with the payment method when available.",
          "type": "string"
        },
        "expMonth": {
          "description": "Card expiration month.",
          "type": "number"
        },
        "expYear": {
          "description": "Card expiration year.",
          "type": "number"
        },
        "exp_month": {
          "deprecated": true,
          "description": "Card expiration month.",
          "type": "number"
        },
        "exp_year": {
          "deprecated": true,
          "description": "Card expiration year.",
          "type": "number"
        },
        "funding": {
          "description": "Funding type for the payment method, such as debit or credit.",
          "type": "string"
        },
        "gateway": {
          "enum": [
            "stripe",
            "paypal",
            "manual"
          ],
          "type": "string"
        },
        "last4": {
          "description": "Last four digits of the payment method when available.",
          "type": "string"
        },
        "method": {
          "description": "Payment method, such as card.",
          "type": "string"
        },
        "mode": {
          "enum": [
            "default",
            "express"
          ],
          "type": "string"
        },
        "wallet": {
          "description": "Wallet used for the payment method when applicable.",
          "type": "string"
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "paymentOption": {
      "description": "Payment option details. `type` is `full` for standard payments and `manual` for invoice or offline flows; when `type` is `manual`, a `status: unpaid` record is expected and does not indicate a failure.",
      "properties": {
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "instructions": {
          "type": [
            "string",
            "null"
          ]
        },
        "manualType": {
          "enum": [
            "invoice",
            "cash_on_delivery",
            null
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "partialAmount": {
          "type": [
            "number",
            "null"
          ]
        },
        "type": {
          "enum": [
            "manual",
            "partial",
            "full",
            null
          ],
          "type": [
            "string",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "queryParameters": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "URL query parameters captured from the page link.",
      "type": [
        "object",
        "null"
      ]
    },
    "recoveredAt": {
      "description": "The date at which the customer recovered their checkout through cart abandonment.",
      "format": "date-time",
      "type": [
        "string",
        "null"
      ]
    },
    "screenWidth": {
      "description": "Customer's screen width in pixels.",
      "type": [
        "number",
        "null"
      ]
    },
    "sellerId": {
      "description": "Seller ID.",
      "type": [
        "string",
        "null"
      ]
    },
    "sessionId": {
      "description": "Unique session ID.",
      "type": [
        "string",
        "null"
      ]
    },
    "shipping": {
      "description": "Shipping details, including name, phone, and address. Often empty.",
      "properties": {
        "address": {
          "description": "Shipping address.",
          "properties": {
            "city": {
              "type": "string"
            },
            "country": {
              "type": "string"
            },
            "line1": {
              "type": "string"
            },
            "line2": {
              "type": "string"
            },
            "postalCode": {
              "type": "string"
            },
            "state": {
              "type": "string"
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "name": {
          "description": "Name from the shipping details.",
          "type": [
            "string",
            "null"
          ]
        },
        "phone": {
          "description": "Phone number from the shipping details.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "status": {
      "description": "Payment status.\n    `paid`: payment collected in full.\n    `partially_paid`: some amount collected, but a balance remains.\n    `refunded`: full refund issued. `amountPaid` still shows the original amount, not the net amount after refund. Use `amountRefunded` for the refund amount and `lastRefundAt` for the refund date.\n    `partial_refund`: partial refund issued. Use `amountRefunded` for the refund amount and `amountPaid - amountRefunded` for the net amount retained. `lastRefundAt`, `lastRefundReason`, and `lastRefundReasonNote` describe the most recent refund action.\n    `draft`: checkout in progress and not yet submitted.\n    `draft_expired`: checkout started but expired before completion.\n    `created`: payment record created, but no action taken yet.\n    `pending`: payment submitted and awaiting processing.\n    `unpaid`: manual or invoice payment created, but not yet paid. This is expected for invoice-based checkouts and is not a failure state.\n    `failed`: payment attempt was rejected. Check `paymentError` for the most recent error message when present.\n    `canceled`: payment was canceled.",
      "enum": [
        "created",
        "pending",
        "unpaid",
        "partially_paid",
        "paid",
        "canceled",
        "failed",
        "partial_refund",
        "refunded",
        "draft",
        "draft_expired"
      ],
      "type": "string"
    },
    "stripeChargeId": {
      "type": [
        "string",
        "null"
      ]
    },
    "stripePaymentIntentId": {
      "type": [
        "string",
        "null"
      ]
    },
    "stripeTaxCalculationId": {
      "type": [
        "string",
        "null"
      ]
    },
    "stripeTaxTransactionId": {
      "type": [
        "string",
        "null"
      ]
    },
    "taxAmount": {
      "description": "The total tax amount.",
      "type": [
        "number",
        "null"
      ]
    },
    "taxBreakdown": {
      "items": {
        "properties": {
          "taxAmount": {
            "type": [
              "number",
              "null"
            ]
          },
          "taxRateDetails": {
            "properties": {
              "country": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "percentageDecimal": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "state": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "taxType": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": [
              "object",
              "null"
            ]
          },
          "taxType": {
            "type": [
              "string",
              "null"
            ]
          },
          "taxabilityReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "taxableAmount": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "type": [
          "object",
          "null"
        ]
      },
      "type": "array"
    },
    "taxRates": {
      "description": "Fixed tax rates applied to this record. Populated when `taxSource` is `fixed_tax_rate`.",
      "items": {
        "$ref": "#/$defs/HistoricalTaxRateSnapshot"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "taxSource": {
      "description": "How tax was applied. `fixed_tax_rate` when tax rates were applied directly to the record. `stripe_tax` when tax was calculated by Stripe based on the transaction details and Stripe Tax settings.",
      "enum": [
        "fixed_tax_rate",
        "stripe_tax",
        null
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "ticketFeesAmount": {
      "description": "Booking fees actually charged on this booking, in the smallest currency unit. Starts from the sum of `tickets[].fee.totalAmount`; an order-level coupon that applies to fees reaches them only after it has used up the ticket prices. 0 on a complimentary booking or when no ticket had a fee.",
      "type": [
        "number",
        "null"
      ]
    },
    "tickets": {
      "description": "Array of ticket objects.",
      "items": {
        "properties": {
          "capacity": {
            "description": "Ticket type capacity. If not set ticket capacity is unlimited.",
            "type": [
              "number",
              "null"
            ]
          },
          "discount": {
            "properties": {
              "amount": {
                "description": "Total discount amount.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "amountOff": {
                "description": "Fixed amount off the original price. Cannot be combined with `percentOff`.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "maxQuantity": {
                "description": "Maximum quantity allowed for the discount.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "minQuantity": {
                "description": "Minimum quantity required to be eligible for the discount.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "percentOff": {
                "description": "Percentage off the original price. Cannot be combined with `amountOff`.",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "type": [
              "object",
              "null"
            ]
          },
          "fee": {
            "description": "The ticket type fee charged on this line item, kept separate from `price`. Null when the ticket type had no fee.",
            "properties": {
              "amount": {
                "description": "Fee per ticket at the time of purchase, in the smallest currency unit.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "display": {
                "description": "How the fee was presented at checkout.",
                "enum": [
                  "included",
                  "separate",
                  null
                ],
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "description": "Name of the fee.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "totalAmount": {
                "description": "Total fee for this line item, in the smallest currency unit: `amount` × `quantity`, less the share of a ticket-scoped coupon that applied to fees. An order-level coupon is not reflected here; see `ticketFeesAmount`.",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "type": [
              "object",
              "null"
            ]
          },
          "name": {
            "description": "Ticket name.",
            "type": [
              "string",
              "null"
            ]
          },
          "originalPrice": {
            "description": "Per-ticket price before discount, in the smallest currency unit.",
            "type": [
              "number",
              "null"
            ]
          },
          "price": {
            "description": "Per-ticket price in the smallest currency unit.",
            "type": [
              "number",
              "null"
            ]
          },
          "pricing": {
            "description": "Ticket type pricing at time of purchase. 'pwyw' means the buyer chose the amount (pay what you want).",
            "enum": [
              "paid",
              "pwyw",
              "free",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "quantity": {
            "description": "Quantity purchased for this ticket line item.",
            "type": [
              "number",
              "null"
            ]
          },
          "reference": {
            "description": "Ticket reference.",
            "type": [
              "string",
              "null"
            ]
          },
          "ticketGroupCapacity": {
            "description": "Ticket group capacity.",
            "type": [
              "number",
              "null"
            ]
          },
          "ticketGroupId": {
            "description": "Ticket group ID.",
            "type": [
              "string",
              "null"
            ]
          },
          "ticketGroupName": {
            "description": "Ticket group name.",
            "type": [
              "string",
              "null"
            ]
          },
          "ticketGroupReference": {
            "description": "Ticket group reference.",
            "type": [
              "string",
              "null"
            ]
          },
          "ticketTypeId": {
            "description": "Ticket type ID.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "transactionIds": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "updatedAt": {
      "description": "ISO 8601 timestamp when this record was last updated.",
      "format": "date-time",
      "type": "string"
    },
    "upsell": {
      "description": "Whether this record is an upsell. Upsell records are included in results by default.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "upsellChargeId": {
      "description": "For an upsell record, the ID of the payment made on the page before the upsell.",
      "type": [
        "string",
        "null"
      ]
    },
    "upsellPageId": {
      "description": "For an upsell record, the ID of the page the buyer paid on before accepting the upsell (the start of the funnel).",
      "type": [
        "string",
        "null"
      ]
    },
    "upsellSubscriptionId": {
      "description": "For an upsell record, the ID of the subscription created on the page before the upsell.",
      "type": [
        "string",
        "null"
      ]
    },
    "userAgent": {
      "description": "Customer's browser user agent string.",
      "type": [
        "string",
        "null"
      ]
    },
    "visitId": {
      "description": "Unique visit ID to track a customer across multiple sessions.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "id",
    "status",
    "amount",
    "taxBreakdown",
    "createdAt",
    "updatedAt"
  ],
  "type": "object",
  "$defs": {
    "HistoricalTaxRateSnapshot": {
      "description": "Tax rate values captured at the time of the transaction.",
      "properties": {
        "active": {
          "type": "boolean"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "default": {
          "type": "boolean"
        },
        "displayName": {
          "description": "The name of the tax rate. Used in the checkout and invoice.",
          "type": "string"
        },
        "inclusive": {
          "description": "Whether the tax rate is inclusive.",
          "type": "boolean"
        },
        "percentage": {
          "description": "The percentage of the tax rate.",
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        "stripeId": {
          "description": "The ID of the tax rate in Stripe at the time of the transaction.",
          "type": "string"
        },
        "taxRate": {
          "allOf": [
            {
              "$ref": "#/$defs/UniqueIdentifier"
            },
            {
              "description": "Tax rate ID this snapshot was taken from."
            }
          ]
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        }
      },
      "required": [
        "taxRate",
        "stripeId",
        "displayName",
        "inclusive",
        "percentage"
      ],
      "type": "object"
    },
    "UniqueIdentifier": {
      "description": "Unique identifier for the ticket.",
      "pattern": "^[0-9a-fA-F]{24}$",
      "type": "string"
    }
  }
}