{
  "openapi": "3.1.0",
  "info": {
    "title": "Voyant Operator API",
    "version": "0.0.0",
    "description": "Generated from the composed operator app. Do not edit by hand."
  },
  "servers": [
    {
      "url": "/",
      "description": "This deployment (same origin)"
    }
  ],
  "components": {
    "schemas": {
      "CatalogSearchFilter": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": ["eq"]
              },
              "field": {
                "type": "string",
                "minLength": 1
              },
              "value": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  }
                ]
              }
            },
            "required": ["kind", "field", "value"]
          },
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": ["in"]
              },
              "field": {
                "type": "string",
                "minLength": 1
              },
              "values": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    }
                  ]
                }
              }
            },
            "required": ["kind", "field", "values"]
          },
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": ["range"]
              },
              "field": {
                "type": "string",
                "minLength": 1
              },
              "gte": {
                "type": "number"
              },
              "lte": {
                "type": "number"
              }
            },
            "required": ["kind", "field"]
          },
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": ["and"]
              },
              "clauses": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CatalogSearchFilter"
                }
              }
            },
            "required": ["kind", "clauses"]
          },
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": ["or"]
              },
              "clauses": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CatalogSearchFilter"
                }
              }
            },
            "required": ["kind", "clauses"]
          }
        ]
      }
    },
    "parameters": {}
  },
  "paths": {
    "/v1/public/products/{productId}/offers": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "productId",
            "in": "path"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "departureId",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 2
            },
            "required": false,
            "name": "locale",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Promotional offers applicable to a product (and optional departure)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "slug": {
                            "type": ["string", "null"]
                          },
                          "description": {
                            "type": ["string", "null"]
                          },
                          "discountType": {
                            "type": "string",
                            "enum": ["percentage", "fixed_amount"]
                          },
                          "discountValue": {
                            "type": "string"
                          },
                          "currency": {
                            "type": ["string", "null"]
                          },
                          "applicableProductIds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "applicableDepartureIds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "validFrom": {
                            "type": ["string", "null"]
                          },
                          "validTo": {
                            "type": ["string", "null"]
                          },
                          "minTravelers": {
                            "type": ["integer", "null"]
                          },
                          "imageMobileUrl": {
                            "type": ["string", "null"]
                          },
                          "imageDesktopUrl": {
                            "type": ["string", "null"]
                          },
                          "stackable": {
                            "type": "boolean"
                          },
                          "createdAt": {
                            "type": "string"
                          },
                          "updatedAt": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "slug",
                          "description",
                          "discountType",
                          "discountValue",
                          "currency",
                          "applicableProductIds",
                          "applicableDepartureIds",
                          "validFrom",
                          "validTo",
                          "minTravelers",
                          "imageMobileUrl",
                          "imageDesktopUrl",
                          "stackable",
                          "createdAt",
                          "updatedAt"
                        ]
                      }
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          }
        },
        "operationId": "getPublicProductsByProductIdOffers",
        "summary": "GET /v1/public/products/{productId}/offers",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/offers/{slug}": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "slug",
            "in": "path"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "departureId",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "minLength": 2
            },
            "required": false,
            "name": "locale",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "A promotional offer by slug",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "slug": {
                          "type": ["string", "null"]
                        },
                        "description": {
                          "type": ["string", "null"]
                        },
                        "discountType": {
                          "type": "string",
                          "enum": ["percentage", "fixed_amount"]
                        },
                        "discountValue": {
                          "type": "string"
                        },
                        "currency": {
                          "type": ["string", "null"]
                        },
                        "applicableProductIds": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "applicableDepartureIds": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "validFrom": {
                          "type": ["string", "null"]
                        },
                        "validTo": {
                          "type": ["string", "null"]
                        },
                        "minTravelers": {
                          "type": ["integer", "null"]
                        },
                        "imageMobileUrl": {
                          "type": ["string", "null"]
                        },
                        "imageDesktopUrl": {
                          "type": ["string", "null"]
                        },
                        "stackable": {
                          "type": "boolean"
                        },
                        "createdAt": {
                          "type": "string"
                        },
                        "updatedAt": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "slug",
                        "description",
                        "discountType",
                        "discountValue",
                        "currency",
                        "applicableProductIds",
                        "applicableDepartureIds",
                        "validFrom",
                        "validTo",
                        "minTravelers",
                        "imageMobileUrl",
                        "imageDesktopUrl",
                        "stackable",
                        "createdAt",
                        "updatedAt"
                      ]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "404": {
            "description": "Storefront offer not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "getPublicOffersBySlug",
        "summary": "GET /v1/public/offers/{slug}",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/offers/{slug}/apply": {
      "post": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "slug",
            "in": "path"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "productId": {
                    "type": "string",
                    "minLength": 1
                  },
                  "departureId": {
                    "type": ["string", "null"],
                    "minLength": 1
                  },
                  "bookingId": {
                    "type": ["string", "null"],
                    "minLength": 1
                  },
                  "sessionId": {
                    "type": ["string", "null"],
                    "minLength": 1
                  },
                  "locale": {
                    "type": "string",
                    "minLength": 2
                  },
                  "pax": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "audience": {
                    "type": "string",
                    "enum": ["staff", "customer", "partner", "supplier"],
                    "default": "customer"
                  },
                  "market": {
                    "type": "string",
                    "minLength": 1,
                    "default": "default"
                  },
                  "basePriceCents": {
                    "type": ["integer", "null"],
                    "minimum": 0
                  },
                  "currency": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3
                  }
                },
                "required": ["productId", "pax", "basePriceCents", "currency"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result of applying a promotional offer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": ["applied", "not_applicable", "invalid", "conflict"]
                        },
                        "reason": {
                          "type": ["string", "null"],
                          "enum": [
                            "offer_not_found",
                            "offer_expired",
                            "offer_not_yet_valid",
                            "code_not_found",
                            "code_required",
                            "code_expired",
                            "code_not_yet_valid",
                            "scope",
                            "min_pax",
                            "eligibility",
                            "currency",
                            "no_discount",
                            "booking_mismatch",
                            "session_mismatch",
                            "conflict",
                            null
                          ]
                        },
                        "offer": {
                          "type": ["object", "null"],
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "slug": {
                              "type": ["string", "null"]
                            },
                            "description": {
                              "type": ["string", "null"]
                            },
                            "discountType": {
                              "type": "string",
                              "enum": ["percentage", "fixed_amount"]
                            },
                            "discountValue": {
                              "type": "string"
                            },
                            "currency": {
                              "type": ["string", "null"]
                            },
                            "applicableProductIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "applicableDepartureIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "validFrom": {
                              "type": ["string", "null"]
                            },
                            "validTo": {
                              "type": ["string", "null"]
                            },
                            "minTravelers": {
                              "type": ["integer", "null"]
                            },
                            "imageMobileUrl": {
                              "type": ["string", "null"]
                            },
                            "imageDesktopUrl": {
                              "type": ["string", "null"]
                            },
                            "stackable": {
                              "type": "boolean"
                            },
                            "createdAt": {
                              "type": "string"
                            },
                            "updatedAt": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id",
                            "name",
                            "slug",
                            "description",
                            "discountType",
                            "discountValue",
                            "currency",
                            "applicableProductIds",
                            "applicableDepartureIds",
                            "validFrom",
                            "validTo",
                            "minTravelers",
                            "imageMobileUrl",
                            "imageDesktopUrl",
                            "stackable",
                            "createdAt",
                            "updatedAt"
                          ]
                        },
                        "target": {
                          "type": "object",
                          "properties": {
                            "bookingId": {
                              "type": ["string", "null"]
                            },
                            "sessionId": {
                              "type": ["string", "null"]
                            },
                            "productId": {
                              "type": "string"
                            },
                            "departureId": {
                              "type": ["string", "null"]
                            }
                          },
                          "required": ["bookingId", "sessionId", "productId", "departureId"]
                        },
                        "pricing": {
                          "type": "object",
                          "properties": {
                            "basePriceCents": {
                              "type": "integer"
                            },
                            "currency": {
                              "type": "string"
                            },
                            "discountAppliedCents": {
                              "type": "integer"
                            },
                            "discountedPriceCents": {
                              "type": "integer"
                            }
                          },
                          "required": [
                            "basePriceCents",
                            "currency",
                            "discountAppliedCents",
                            "discountedPriceCents"
                          ]
                        },
                        "appliedOffers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "offerId": {
                                "type": "string"
                              },
                              "offerName": {
                                "type": "string"
                              },
                              "discountAppliedCents": {
                                "type": "integer"
                              },
                              "discountedPriceCents": {
                                "type": "integer"
                              },
                              "currency": {
                                "type": "string"
                              },
                              "discountKind": {
                                "type": "string",
                                "enum": ["percentage", "fixed_amount"]
                              },
                              "discountPercent": {
                                "type": ["number", "null"]
                              },
                              "discountAmountCents": {
                                "type": ["integer", "null"]
                              },
                              "appliedCode": {
                                "type": ["string", "null"]
                              },
                              "stackable": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "offerId",
                              "offerName",
                              "discountAppliedCents",
                              "discountedPriceCents",
                              "currency",
                              "discountKind",
                              "discountPercent",
                              "discountAmountCents",
                              "appliedCode",
                              "stackable"
                            ]
                          }
                        },
                        "conflict": {
                          "type": ["object", "null"],
                          "properties": {
                            "policy": {
                              "type": "string",
                              "enum": ["best_discount_wins", "stackable_compose"]
                            },
                            "autoAppliedOfferIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "manualOfferId": {
                              "type": ["string", "null"]
                            },
                            "selectedOfferIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "policy",
                            "autoAppliedOfferIds",
                            "manualOfferId",
                            "selectedOfferIds",
                            "message"
                          ]
                        }
                      },
                      "required": [
                        "status",
                        "reason",
                        "offer",
                        "target",
                        "pricing",
                        "appliedOffers",
                        "conflict"
                      ]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "501": {
            "description": "Storefront offer application is not configured",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postPublicOffersBySlugApply",
        "summary": "POST /v1/public/offers/{slug}/apply",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/offers/redeem": {
      "post": {
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "productId": {
                    "type": "string",
                    "minLength": 1
                  },
                  "departureId": {
                    "type": ["string", "null"],
                    "minLength": 1
                  },
                  "bookingId": {
                    "type": ["string", "null"],
                    "minLength": 1
                  },
                  "sessionId": {
                    "type": ["string", "null"],
                    "minLength": 1
                  },
                  "locale": {
                    "type": "string",
                    "minLength": 2
                  },
                  "pax": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "audience": {
                    "type": "string",
                    "enum": ["staff", "customer", "partner", "supplier"],
                    "default": "customer"
                  },
                  "market": {
                    "type": "string",
                    "minLength": 1,
                    "default": "default"
                  },
                  "basePriceCents": {
                    "type": ["integer", "null"],
                    "minimum": 0
                  },
                  "currency": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3
                  },
                  "code": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  }
                },
                "required": ["productId", "pax", "basePriceCents", "currency", "code"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result of redeeming a promotional offer code",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": ["applied", "not_applicable", "invalid", "conflict"]
                        },
                        "reason": {
                          "type": ["string", "null"],
                          "enum": [
                            "offer_not_found",
                            "offer_expired",
                            "offer_not_yet_valid",
                            "code_not_found",
                            "code_required",
                            "code_expired",
                            "code_not_yet_valid",
                            "scope",
                            "min_pax",
                            "eligibility",
                            "currency",
                            "no_discount",
                            "booking_mismatch",
                            "session_mismatch",
                            "conflict",
                            null
                          ]
                        },
                        "offer": {
                          "type": ["object", "null"],
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "slug": {
                              "type": ["string", "null"]
                            },
                            "description": {
                              "type": ["string", "null"]
                            },
                            "discountType": {
                              "type": "string",
                              "enum": ["percentage", "fixed_amount"]
                            },
                            "discountValue": {
                              "type": "string"
                            },
                            "currency": {
                              "type": ["string", "null"]
                            },
                            "applicableProductIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "applicableDepartureIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "validFrom": {
                              "type": ["string", "null"]
                            },
                            "validTo": {
                              "type": ["string", "null"]
                            },
                            "minTravelers": {
                              "type": ["integer", "null"]
                            },
                            "imageMobileUrl": {
                              "type": ["string", "null"]
                            },
                            "imageDesktopUrl": {
                              "type": ["string", "null"]
                            },
                            "stackable": {
                              "type": "boolean"
                            },
                            "createdAt": {
                              "type": "string"
                            },
                            "updatedAt": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id",
                            "name",
                            "slug",
                            "description",
                            "discountType",
                            "discountValue",
                            "currency",
                            "applicableProductIds",
                            "applicableDepartureIds",
                            "validFrom",
                            "validTo",
                            "minTravelers",
                            "imageMobileUrl",
                            "imageDesktopUrl",
                            "stackable",
                            "createdAt",
                            "updatedAt"
                          ]
                        },
                        "target": {
                          "type": "object",
                          "properties": {
                            "bookingId": {
                              "type": ["string", "null"]
                            },
                            "sessionId": {
                              "type": ["string", "null"]
                            },
                            "productId": {
                              "type": "string"
                            },
                            "departureId": {
                              "type": ["string", "null"]
                            }
                          },
                          "required": ["bookingId", "sessionId", "productId", "departureId"]
                        },
                        "pricing": {
                          "type": "object",
                          "properties": {
                            "basePriceCents": {
                              "type": "integer"
                            },
                            "currency": {
                              "type": "string"
                            },
                            "discountAppliedCents": {
                              "type": "integer"
                            },
                            "discountedPriceCents": {
                              "type": "integer"
                            }
                          },
                          "required": [
                            "basePriceCents",
                            "currency",
                            "discountAppliedCents",
                            "discountedPriceCents"
                          ]
                        },
                        "appliedOffers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "offerId": {
                                "type": "string"
                              },
                              "offerName": {
                                "type": "string"
                              },
                              "discountAppliedCents": {
                                "type": "integer"
                              },
                              "discountedPriceCents": {
                                "type": "integer"
                              },
                              "currency": {
                                "type": "string"
                              },
                              "discountKind": {
                                "type": "string",
                                "enum": ["percentage", "fixed_amount"]
                              },
                              "discountPercent": {
                                "type": ["number", "null"]
                              },
                              "discountAmountCents": {
                                "type": ["integer", "null"]
                              },
                              "appliedCode": {
                                "type": ["string", "null"]
                              },
                              "stackable": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "offerId",
                              "offerName",
                              "discountAppliedCents",
                              "discountedPriceCents",
                              "currency",
                              "discountKind",
                              "discountPercent",
                              "discountAmountCents",
                              "appliedCode",
                              "stackable"
                            ]
                          }
                        },
                        "conflict": {
                          "type": ["object", "null"],
                          "properties": {
                            "policy": {
                              "type": "string",
                              "enum": ["best_discount_wins", "stackable_compose"]
                            },
                            "autoAppliedOfferIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "manualOfferId": {
                              "type": ["string", "null"]
                            },
                            "selectedOfferIds": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "policy",
                            "autoAppliedOfferIds",
                            "manualOfferId",
                            "selectedOfferIds",
                            "message"
                          ]
                        }
                      },
                      "required": [
                        "status",
                        "reason",
                        "offer",
                        "target",
                        "pricing",
                        "appliedOffers",
                        "conflict"
                      ]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "501": {
            "description": "Storefront offer redemption is not configured",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postPublicOffersRedeem",
        "summary": "POST /v1/public/offers/redeem",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/leads": {
      "post": {
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": ["wishlist", "notify", "inquiry", "request_offer", "referral"],
                    "default": "inquiry"
                  },
                  "source": {
                    "type": "string",
                    "enum": ["form", "phone", "admin", "abandoned_cart", "website", "booking"],
                    "default": "website"
                  },
                  "contact": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 240
                      },
                      "firstName": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "lastName": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "email": {
                        "type": "string",
                        "maxLength": 320,
                        "format": "email"
                      },
                      "phone": {
                        "type": "string",
                        "minLength": 3,
                        "maxLength": 64
                      }
                    }
                  },
                  "productId": {
                    "type": ["string", "null"],
                    "minLength": 1,
                    "maxLength": 160
                  },
                  "optionUnitId": {
                    "type": ["string", "null"],
                    "minLength": 1,
                    "maxLength": 160
                  },
                  "notes": {
                    "type": ["string", "null"],
                    "maxLength": 4000
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "maxItems": 20,
                    "default": []
                  },
                  "sourceSubmissionId": {
                    "type": ["string", "null"],
                    "minLength": 1,
                    "maxLength": 160
                  },
                  "sourceUrl": {
                    "type": ["string", "null"],
                    "format": "uri"
                  },
                  "locale": {
                    "type": "string",
                    "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
                  },
                  "payload": {
                    "type": "object",
                    "additionalProperties": {},
                    "default": {}
                  },
                  "consent": {
                    "type": "object",
                    "properties": {
                      "marketing": {
                        "type": "boolean",
                        "default": false
                      },
                      "newsletter": {
                        "type": "boolean",
                        "default": false
                      },
                      "gdpr": {
                        "type": "boolean",
                        "default": false
                      },
                      "scope": {
                        "type": ["string", "null"],
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "acceptedAt": {
                        "type": ["string", "null"],
                        "format": "date-time"
                      }
                    },
                    "default": {
                      "marketing": false,
                      "newsletter": false,
                      "gdpr": false
                    }
                  }
                },
                "required": ["contact"]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The captured storefront lead/inquiry signal",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "personId": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": ["wishlist", "notify", "inquiry", "request_offer", "referral"]
                        },
                        "source": {
                          "type": "string",
                          "enum": ["form", "phone", "admin", "abandoned_cart", "website", "booking"]
                        },
                        "status": {
                          "type": "string",
                          "enum": ["new", "contacted", "qualified", "converted", "lost", "expired"]
                        },
                        "duplicate": {
                          "type": "boolean"
                        }
                      },
                      "required": ["id", "personId", "kind", "source", "status", "duplicate"]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "400": {
            "description": "Rejected by intake guard (invalid request)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          },
          "403": {
            "description": "Rejected by the deployment intake guard (e.g. spam/abuse)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          },
          "429": {
            "description": "Rejected by intake guard (rate limited)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postPublicLeads",
        "summary": "POST /v1/public/leads",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/newsletter/subscribe": {
      "post": {
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "maxLength": 320,
                    "format": "email"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 240
                  },
                  "firstName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  },
                  "lastName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 120
                  },
                  "source": {
                    "type": "string",
                    "enum": ["form", "phone", "admin", "abandoned_cart", "website", "booking"],
                    "default": "website"
                  },
                  "sourceSubmissionId": {
                    "type": ["string", "null"],
                    "minLength": 1,
                    "maxLength": 160
                  },
                  "sourceUrl": {
                    "type": ["string", "null"],
                    "format": "uri"
                  },
                  "locale": {
                    "type": "string",
                    "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "maxItems": 20,
                    "default": []
                  },
                  "payload": {
                    "type": "object",
                    "additionalProperties": {},
                    "default": {}
                  },
                  "consent": {
                    "type": "object",
                    "properties": {
                      "marketing": {
                        "type": "boolean",
                        "default": false
                      },
                      "newsletter": {
                        "type": "boolean",
                        "enum": [true]
                      },
                      "gdpr": {
                        "type": "boolean",
                        "default": false
                      },
                      "scope": {
                        "type": ["string", "null"],
                        "minLength": 1,
                        "maxLength": 120
                      },
                      "acceptedAt": {
                        "type": ["string", "null"],
                        "format": "date-time"
                      }
                    },
                    "required": ["newsletter"]
                  }
                },
                "required": ["email", "consent"]
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The captured newsletter subscription signal",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "personId": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string",
                          "enum": ["wishlist", "notify", "inquiry", "request_offer", "referral"]
                        },
                        "source": {
                          "type": "string",
                          "enum": ["form", "phone", "admin", "abandoned_cart", "website", "booking"]
                        },
                        "status": {
                          "type": "string",
                          "enum": ["new", "contacted", "qualified", "converted", "lost", "expired"]
                        },
                        "duplicate": {
                          "type": "boolean"
                        },
                        "doubleOptIn": {
                          "type": "string",
                          "enum": ["not_configured", "requested"]
                        }
                      },
                      "required": [
                        "id",
                        "personId",
                        "kind",
                        "source",
                        "status",
                        "duplicate",
                        "doubleOptIn"
                      ]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "400": {
            "description": "Rejected by intake guard (invalid request)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          },
          "403": {
            "description": "Rejected by the deployment intake guard (e.g. spam/abuse)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          },
          "429": {
            "description": "Rejected by intake guard (rate limited)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postPublicNewsletterSubscribe",
        "summary": "POST /v1/public/newsletter/subscribe",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/settings": {
      "get": {
        "responses": {
          "200": {
            "description": "The deployment's public storefront settings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "support": {
                          "type": "object",
                          "properties": {
                            "email": {
                              "type": ["string", "null"],
                              "format": "email"
                            },
                            "phone": {
                              "type": ["string", "null"],
                              "minLength": 1
                            },
                            "links": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "label": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  }
                                },
                                "required": ["label", "url"]
                              }
                            }
                          },
                          "required": ["email", "phone", "links"]
                        },
                        "legal": {
                          "type": "object",
                          "properties": {
                            "termsUrl": {
                              "type": ["string", "null"],
                              "format": "uri"
                            },
                            "privacyUrl": {
                              "type": ["string", "null"],
                              "format": "uri"
                            },
                            "cancellationUrl": {
                              "type": ["string", "null"],
                              "format": "uri"
                            },
                            "defaultContractTemplateId": {
                              "type": ["string", "null"],
                              "minLength": 1
                            }
                          },
                          "required": [
                            "termsUrl",
                            "privacyUrl",
                            "cancellationUrl",
                            "defaultContractTemplateId"
                          ]
                        },
                        "localization": {
                          "type": "object",
                          "properties": {
                            "defaultLocale": {
                              "type": ["string", "null"],
                              "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
                            },
                            "currencyDisplay": {
                              "type": "string",
                              "enum": ["code", "symbol", "name"]
                            }
                          },
                          "required": ["defaultLocale", "currencyDisplay"]
                        },
                        "forms": {
                          "type": "object",
                          "properties": {
                            "billing": {
                              "type": "object",
                              "properties": {
                                "fields": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "minLength": 1
                                      },
                                      "label": {
                                        "type": "string",
                                        "minLength": 1
                                      },
                                      "type": {
                                        "type": "string",
                                        "enum": [
                                          "text",
                                          "email",
                                          "tel",
                                          "textarea",
                                          "select",
                                          "checkbox",
                                          "date",
                                          "country"
                                        ]
                                      },
                                      "required": {
                                        "type": "boolean"
                                      },
                                      "placeholder": {
                                        "type": ["string", "null"],
                                        "minLength": 1
                                      },
                                      "description": {
                                        "type": ["string", "null"],
                                        "minLength": 1
                                      },
                                      "autocomplete": {
                                        "type": ["string", "null"],
                                        "minLength": 1
                                      },
                                      "options": {
                                        "type": "array",
                                        "items": {
                                          "type": "object",
                                          "properties": {
                                            "value": {
                                              "type": "string",
                                              "minLength": 1
                                            },
                                            "label": {
                                              "type": "string",
                                              "minLength": 1
                                            }
                                          },
                                          "required": ["value", "label"]
                                        }
                                      }
                                    },
                                    "required": [
                                      "key",
                                      "label",
                                      "type",
                                      "required",
                                      "placeholder",
                                      "description",
                                      "autocomplete",
                                      "options"
                                    ]
                                  }
                                }
                              },
                              "required": ["fields"]
                            },
                            "travelers": {
                              "type": "object",
                              "properties": {
                                "fields": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "minLength": 1
                                      },
                                      "label": {
                                        "type": "string",
                                        "minLength": 1
                                      },
                                      "type": {
                                        "type": "string",
                                        "enum": [
                                          "text",
                                          "email",
                                          "tel",
                                          "textarea",
                                          "select",
                                          "checkbox",
                                          "date",
                                          "country"
                                        ]
                                      },
                                      "required": {
                                        "type": "boolean"
                                      },
                                      "placeholder": {
                                        "type": ["string", "null"],
                                        "minLength": 1
                                      },
                                      "description": {
                                        "type": ["string", "null"],
                                        "minLength": 1
                                      },
                                      "autocomplete": {
                                        "type": ["string", "null"],
                                        "minLength": 1
                                      },
                                      "options": {
                                        "type": "array",
                                        "items": {
                                          "type": "object",
                                          "properties": {
                                            "value": {
                                              "type": "string",
                                              "minLength": 1
                                            },
                                            "label": {
                                              "type": "string",
                                              "minLength": 1
                                            }
                                          },
                                          "required": ["value", "label"]
                                        }
                                      }
                                    },
                                    "required": [
                                      "key",
                                      "label",
                                      "type",
                                      "required",
                                      "placeholder",
                                      "description",
                                      "autocomplete",
                                      "options"
                                    ]
                                  }
                                }
                              },
                              "required": ["fields"]
                            }
                          },
                          "required": ["billing", "travelers"]
                        },
                        "payment": {
                          "type": "object",
                          "properties": {
                            "defaultMethod": {
                              "type": ["string", "null"],
                              "enum": [
                                "card",
                                "bank_transfer",
                                "cash",
                                "travel_credit",
                                "invoice",
                                null
                              ]
                            },
                            "methods": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "code": {
                                    "type": "string",
                                    "enum": [
                                      "card",
                                      "bank_transfer",
                                      "cash",
                                      "travel_credit",
                                      "invoice"
                                    ]
                                  },
                                  "label": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "description": {
                                    "type": ["string", "null"],
                                    "minLength": 1
                                  },
                                  "enabled": {
                                    "type": "boolean"
                                  }
                                },
                                "required": ["code", "label", "description", "enabled"]
                              }
                            },
                            "structure": {
                              "type": "string",
                              "enum": ["full", "split"]
                            },
                            "schedule": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "percent": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "dueInDays": {
                                    "type": "integer",
                                    "minimum": 0
                                  },
                                  "dueCondition": {
                                    "type": "string",
                                    "enum": ["after_booking", "before_departure"]
                                  }
                                },
                                "required": ["percent", "dueInDays", "dueCondition"]
                              }
                            },
                            "defaultSchedule": {
                              "type": ["object", "null"],
                              "properties": {
                                "depositPercent": {
                                  "type": ["number", "null"],
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                "balanceDueDaysBeforeDeparture": {
                                  "type": ["integer", "null"],
                                  "minimum": 0
                                }
                              },
                              "required": ["depositPercent", "balanceDueDaysBeforeDeparture"]
                            },
                            "bankTransfer": {
                              "type": ["object", "null"],
                              "properties": {
                                "dueDays": {
                                  "type": ["integer", "null"],
                                  "minimum": 0
                                },
                                "account": {
                                  "type": ["object", "null"],
                                  "properties": {
                                    "provider": {
                                      "type": ["string", "null"],
                                      "minLength": 1
                                    },
                                    "currency": {
                                      "type": ["string", "null"],
                                      "minLength": 1
                                    },
                                    "iban": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "beneficiary": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "bank": {
                                      "type": "string",
                                      "minLength": 1
                                    }
                                  },
                                  "required": [
                                    "provider",
                                    "currency",
                                    "iban",
                                    "beneficiary",
                                    "bank"
                                  ]
                                },
                                "accountHolder": {
                                  "type": ["string", "null"],
                                  "minLength": 1
                                },
                                "bankName": {
                                  "type": ["string", "null"],
                                  "minLength": 1
                                },
                                "iban": {
                                  "type": ["string", "null"],
                                  "minLength": 1
                                },
                                "bic": {
                                  "type": ["string", "null"],
                                  "minLength": 1
                                },
                                "paymentReference": {
                                  "type": ["string", "null"],
                                  "minLength": 1
                                },
                                "instructions": {
                                  "type": ["string", "null"],
                                  "minLength": 1
                                }
                              },
                              "required": [
                                "dueDays",
                                "account",
                                "accountHolder",
                                "bankName",
                                "iban",
                                "bic",
                                "paymentReference",
                                "instructions"
                              ]
                            }
                          },
                          "required": [
                            "defaultMethod",
                            "methods",
                            "structure",
                            "schedule",
                            "defaultSchedule",
                            "bankTransfer"
                          ]
                        }
                      },
                      "required": ["support", "legal", "localization", "forms", "payment"]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          }
        },
        "operationId": "getPublicSettings",
        "summary": "GET /v1/public/settings",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/departures/{departureId}": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "departureId",
            "in": "path"
          }
        ],
        "responses": {
          "200": {
            "description": "A storefront departure (availability slot) by id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "productId": {
                          "type": "string"
                        },
                        "itineraryId": {
                          "type": "string"
                        },
                        "optionId": {
                          "type": ["string", "null"]
                        },
                        "dateLocal": {
                          "type": ["string", "null"]
                        },
                        "startAt": {
                          "type": ["string", "null"]
                        },
                        "endAt": {
                          "type": ["string", "null"]
                        },
                        "timezone": {
                          "type": "string"
                        },
                        "startTime": {
                          "type": ["object", "null"],
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "label": {
                              "type": ["string", "null"]
                            },
                            "startTimeLocal": {
                              "type": "string"
                            },
                            "durationMinutes": {
                              "type": ["integer", "null"]
                            }
                          },
                          "required": ["id", "label", "startTimeLocal", "durationMinutes"]
                        },
                        "meetingPoint": {
                          "type": ["string", "null"]
                        },
                        "capacity": {
                          "type": ["integer", "null"]
                        },
                        "remaining": {
                          "type": ["integer", "null"]
                        },
                        "departureStatus": {
                          "type": "string",
                          "enum": ["open", "closed", "sold_out", "cancelled", "on_request"]
                        },
                        "nights": {
                          "type": ["integer", "null"]
                        },
                        "days": {
                          "type": ["integer", "null"]
                        },
                        "ratePlans": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "active": {
                                "type": "boolean"
                              },
                              "name": {
                                "type": "string"
                              },
                              "pricingModel": {
                                "type": "string"
                              },
                              "basePrices": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "amount": {
                                      "type": "number"
                                    },
                                    "currencyCode": {
                                      "type": "string"
                                    }
                                  },
                                  "required": ["amount", "currencyCode"]
                                }
                              },
                              "roomPrices": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "amount": {
                                      "type": "number"
                                    },
                                    "currencyCode": {
                                      "type": "string"
                                    },
                                    "roomType": {
                                      "type": "object",
                                      "properties": {
                                        "id": {
                                          "type": "string"
                                        },
                                        "name": {
                                          "type": "string"
                                        },
                                        "occupancy": {
                                          "type": "object",
                                          "properties": {
                                            "adultsMin": {
                                              "type": "integer",
                                              "minimum": 0
                                            },
                                            "adultsMax": {
                                              "type": "integer",
                                              "minimum": 0
                                            },
                                            "childrenMax": {
                                              "type": "integer",
                                              "minimum": 0
                                            }
                                          },
                                          "required": ["adultsMin", "adultsMax", "childrenMax"]
                                        }
                                      },
                                      "required": ["id", "name", "occupancy"]
                                    }
                                  },
                                  "required": ["amount", "currencyCode", "roomType"]
                                }
                              }
                            },
                            "required": [
                              "id",
                              "active",
                              "name",
                              "pricingModel",
                              "basePrices",
                              "roomPrices"
                            ]
                          }
                        },
                        "resourceManifest": {
                          "type": ["object", "null"],
                          "properties": {
                            "kinds": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "kind": {
                                    "type": "string"
                                  },
                                  "capacity": {
                                    "type": "number"
                                  },
                                  "assigned": {
                                    "type": "number"
                                  },
                                  "available": {
                                    "type": "number"
                                  }
                                },
                                "required": ["kind", "capacity", "assigned", "available"]
                              }
                            },
                            "resources": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "kind": {
                                    "type": "string"
                                  },
                                  "label": {
                                    "type": ["string", "null"]
                                  },
                                  "refType": {
                                    "type": ["string", "null"]
                                  },
                                  "refId": {
                                    "type": ["string", "null"]
                                  },
                                  "capacity": {
                                    "type": "number"
                                  },
                                  "assigned": {
                                    "type": "number"
                                  },
                                  "available": {
                                    "type": "number"
                                  },
                                  "parentId": {
                                    "type": ["string", "null"]
                                  },
                                  "flags": {
                                    "type": "object",
                                    "additionalProperties": {}
                                  }
                                },
                                "required": [
                                  "id",
                                  "kind",
                                  "label",
                                  "refType",
                                  "refId",
                                  "capacity",
                                  "assigned",
                                  "available",
                                  "parentId",
                                  "flags"
                                ]
                              }
                            }
                          },
                          "required": ["kinds", "resources"]
                        }
                      },
                      "required": [
                        "id",
                        "productId",
                        "itineraryId",
                        "optionId",
                        "dateLocal",
                        "startAt",
                        "endAt",
                        "timezone",
                        "startTime",
                        "meetingPoint",
                        "capacity",
                        "remaining",
                        "departureStatus",
                        "nights",
                        "days",
                        "ratePlans",
                        "resourceManifest"
                      ]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "404": {
            "description": "Storefront departure not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "getPublicDeparturesByDepartureId",
        "summary": "GET /v1/public/departures/{departureId}",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/products/{productId}/departures": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "productId",
            "in": "path"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "optionId",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "enum": ["open", "closed", "sold_out", "cancelled"]
            },
            "required": false,
            "name": "status",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "format": "date"
            },
            "required": false,
            "name": "dateFrom",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "format": "date"
            },
            "required": false,
            "name": "dateTo",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "example": 100
            },
            "required": false,
            "name": "limit",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "example": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Departures (availability slots) for a product",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "productId": {
                            "type": "string"
                          },
                          "itineraryId": {
                            "type": "string"
                          },
                          "optionId": {
                            "type": ["string", "null"]
                          },
                          "dateLocal": {
                            "type": ["string", "null"]
                          },
                          "startAt": {
                            "type": ["string", "null"]
                          },
                          "endAt": {
                            "type": ["string", "null"]
                          },
                          "timezone": {
                            "type": "string"
                          },
                          "startTime": {
                            "type": ["object", "null"],
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "label": {
                                "type": ["string", "null"]
                              },
                              "startTimeLocal": {
                                "type": "string"
                              },
                              "durationMinutes": {
                                "type": ["integer", "null"]
                              }
                            },
                            "required": ["id", "label", "startTimeLocal", "durationMinutes"]
                          },
                          "meetingPoint": {
                            "type": ["string", "null"]
                          },
                          "capacity": {
                            "type": ["integer", "null"]
                          },
                          "remaining": {
                            "type": ["integer", "null"]
                          },
                          "departureStatus": {
                            "type": "string",
                            "enum": ["open", "closed", "sold_out", "cancelled", "on_request"]
                          },
                          "nights": {
                            "type": ["integer", "null"]
                          },
                          "days": {
                            "type": ["integer", "null"]
                          },
                          "ratePlans": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "active": {
                                  "type": "boolean"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "pricingModel": {
                                  "type": "string"
                                },
                                "basePrices": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "amount": {
                                        "type": "number"
                                      },
                                      "currencyCode": {
                                        "type": "string"
                                      }
                                    },
                                    "required": ["amount", "currencyCode"]
                                  }
                                },
                                "roomPrices": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "amount": {
                                        "type": "number"
                                      },
                                      "currencyCode": {
                                        "type": "string"
                                      },
                                      "roomType": {
                                        "type": "object",
                                        "properties": {
                                          "id": {
                                            "type": "string"
                                          },
                                          "name": {
                                            "type": "string"
                                          },
                                          "occupancy": {
                                            "type": "object",
                                            "properties": {
                                              "adultsMin": {
                                                "type": "integer",
                                                "minimum": 0
                                              },
                                              "adultsMax": {
                                                "type": "integer",
                                                "minimum": 0
                                              },
                                              "childrenMax": {
                                                "type": "integer",
                                                "minimum": 0
                                              }
                                            },
                                            "required": ["adultsMin", "adultsMax", "childrenMax"]
                                          }
                                        },
                                        "required": ["id", "name", "occupancy"]
                                      }
                                    },
                                    "required": ["amount", "currencyCode", "roomType"]
                                  }
                                }
                              },
                              "required": [
                                "id",
                                "active",
                                "name",
                                "pricingModel",
                                "basePrices",
                                "roomPrices"
                              ]
                            }
                          },
                          "resourceManifest": {
                            "type": ["object", "null"],
                            "properties": {
                              "kinds": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string"
                                    },
                                    "capacity": {
                                      "type": "number"
                                    },
                                    "assigned": {
                                      "type": "number"
                                    },
                                    "available": {
                                      "type": "number"
                                    }
                                  },
                                  "required": ["kind", "capacity", "assigned", "available"]
                                }
                              },
                              "resources": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "kind": {
                                      "type": "string"
                                    },
                                    "label": {
                                      "type": ["string", "null"]
                                    },
                                    "refType": {
                                      "type": ["string", "null"]
                                    },
                                    "refId": {
                                      "type": ["string", "null"]
                                    },
                                    "capacity": {
                                      "type": "number"
                                    },
                                    "assigned": {
                                      "type": "number"
                                    },
                                    "available": {
                                      "type": "number"
                                    },
                                    "parentId": {
                                      "type": ["string", "null"]
                                    },
                                    "flags": {
                                      "type": "object",
                                      "additionalProperties": {}
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "kind",
                                    "label",
                                    "refType",
                                    "refId",
                                    "capacity",
                                    "assigned",
                                    "available",
                                    "parentId",
                                    "flags"
                                  ]
                                }
                              }
                            },
                            "required": ["kinds", "resources"]
                          }
                        },
                        "required": [
                          "id",
                          "productId",
                          "itineraryId",
                          "optionId",
                          "dateLocal",
                          "startAt",
                          "endAt",
                          "timezone",
                          "startTime",
                          "meetingPoint",
                          "capacity",
                          "remaining",
                          "departureStatus",
                          "nights",
                          "days",
                          "ratePlans",
                          "resourceManifest"
                        ]
                      }
                    },
                    "total": {
                      "type": "integer"
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "offset": {
                      "type": "integer"
                    }
                  },
                  "required": ["data", "total", "limit", "offset"]
                }
              }
            }
          }
        },
        "operationId": "getPublicProductsByProductIdDepartures",
        "summary": "GET /v1/public/products/{productId}/departures",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/products/{productId}/availability": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "productId",
            "in": "path"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "optionId",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "enum": ["open", "closed", "sold_out", "cancelled", "on_request"]
            },
            "required": false,
            "name": "status",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "format": "date"
            },
            "required": false,
            "name": "dateFrom",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "format": "date"
            },
            "required": false,
            "name": "dateTo",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
            },
            "required": false,
            "name": "locale",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "example": 100
            },
            "required": false,
            "name": "limit",
            "in": "query"
          },
          {
            "schema": {
              "type": "integer",
              "example": 0
            },
            "required": false,
            "name": "offset",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Availability summary (counts + per-slot states) for a product",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "productId": {
                          "type": "string"
                        },
                        "availabilityState": {
                          "type": "string",
                          "enum": [
                            "available",
                            "sold_out",
                            "closed",
                            "cancelled",
                            "on_request",
                            "past_cutoff",
                            "too_early",
                            "unavailable"
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer"
                            },
                            "open": {
                              "type": "integer"
                            },
                            "closed": {
                              "type": "integer"
                            },
                            "soldOut": {
                              "type": "integer"
                            },
                            "cancelled": {
                              "type": "integer"
                            },
                            "onRequest": {
                              "type": "integer"
                            },
                            "pastCutoff": {
                              "type": "integer"
                            },
                            "tooEarly": {
                              "type": "integer"
                            },
                            "available": {
                              "type": "integer"
                            }
                          },
                          "required": [
                            "total",
                            "open",
                            "closed",
                            "soldOut",
                            "cancelled",
                            "onRequest",
                            "pastCutoff",
                            "tooEarly",
                            "available"
                          ]
                        },
                        "departures": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "productId": {
                                "type": "string"
                              },
                              "optionId": {
                                "type": ["string", "null"]
                              },
                              "dateLocal": {
                                "type": ["string", "null"]
                              },
                              "startAt": {
                                "type": ["string", "null"]
                              },
                              "endAt": {
                                "type": ["string", "null"]
                              },
                              "timezone": {
                                "type": "string"
                              },
                              "status": {
                                "type": "string",
                                "enum": ["open", "closed", "sold_out", "cancelled", "on_request"]
                              },
                              "availabilityState": {
                                "type": "string",
                                "enum": [
                                  "available",
                                  "sold_out",
                                  "closed",
                                  "cancelled",
                                  "on_request",
                                  "past_cutoff",
                                  "too_early",
                                  "unavailable"
                                ]
                              },
                              "capacity": {
                                "type": ["integer", "null"]
                              },
                              "remaining": {
                                "type": ["integer", "null"]
                              },
                              "pastCutoff": {
                                "type": "boolean"
                              },
                              "tooEarly": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "productId",
                              "optionId",
                              "dateLocal",
                              "startAt",
                              "endAt",
                              "timezone",
                              "status",
                              "availabilityState",
                              "capacity",
                              "remaining",
                              "pastCutoff",
                              "tooEarly"
                            ]
                          }
                        },
                        "total": {
                          "type": "integer"
                        },
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "productId",
                        "availabilityState",
                        "counts",
                        "departures",
                        "total",
                        "limit",
                        "offset"
                      ]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          }
        },
        "operationId": "getPublicProductsByProductIdAvailability",
        "summary": "GET /v1/public/products/{productId}/availability",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/products/{productId}/departures/{departureId}/itinerary": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "productId",
            "in": "path"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "departureId",
            "in": "path"
          },
          {
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
            },
            "required": false,
            "name": "languageTag",
            "in": "query"
          },
          {
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
            },
            "required": false,
            "name": "lang",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Day-by-day itinerary for a product departure",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "itineraryId": {
                          "type": "string"
                        },
                        "days": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "type": ["string", "null"]
                              },
                              "thumbnail": {
                                "type": ["object", "null"],
                                "properties": {
                                  "url": {
                                    "type": "string",
                                    "minLength": 1
                                  }
                                },
                                "required": ["url"]
                              },
                              "segments": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "title": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "type": ["string", "null"]
                                    }
                                  },
                                  "required": ["id", "title", "description"]
                                }
                              }
                            },
                            "required": ["id", "title", "description", "thumbnail", "segments"]
                          }
                        }
                      },
                      "required": ["id", "itineraryId", "days"]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          },
          "404": {
            "description": "Storefront itinerary not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "getPublicProductsByProductIdDeparturesByDepartureIdItinerary",
        "summary": "GET /v1/public/products/{productId}/departures/{departureId}/itinerary",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    },
    "/v1/public/products/{productId}/extensions": {
      "get": {
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "required": true,
            "name": "productId",
            "in": "path"
          },
          {
            "schema": {
              "type": "string"
            },
            "required": false,
            "name": "optionId",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Bookable extensions (extras/add-ons) for a product",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "extensions": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "label": {
                                "type": "string"
                              },
                              "required": {
                                "type": "boolean"
                              },
                              "selectable": {
                                "type": "boolean"
                              },
                              "hasOptions": {
                                "type": "boolean"
                              },
                              "refProductId": {
                                "type": ["string", "null"]
                              },
                              "thumb": {
                                "type": ["string", "null"]
                              },
                              "pricePerPerson": {
                                "type": ["number", "null"]
                              },
                              "currencyCode": {
                                "type": "string"
                              },
                              "pricingMode": {
                                "type": "string",
                                "enum": [
                                  "included",
                                  "per_person",
                                  "per_booking",
                                  "on_request",
                                  "unavailable"
                                ]
                              },
                              "defaultQuantity": {
                                "type": ["integer", "null"]
                              },
                              "minQuantity": {
                                "type": ["integer", "null"]
                              },
                              "maxQuantity": {
                                "type": ["integer", "null"]
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "label",
                              "required",
                              "selectable",
                              "hasOptions",
                              "refProductId",
                              "thumb",
                              "pricePerPerson",
                              "currencyCode",
                              "pricingMode",
                              "defaultQuantity",
                              "minQuantity",
                              "maxQuantity"
                            ]
                          }
                        },
                        "items": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "label": {
                                "type": "string"
                              },
                              "required": {
                                "type": "boolean"
                              },
                              "selectable": {
                                "type": "boolean"
                              },
                              "hasOptions": {
                                "type": "boolean"
                              },
                              "refProductId": {
                                "type": ["string", "null"]
                              },
                              "thumb": {
                                "type": ["string", "null"]
                              },
                              "pricePerPerson": {
                                "type": ["number", "null"]
                              },
                              "currencyCode": {
                                "type": "string"
                              },
                              "pricingMode": {
                                "type": "string",
                                "enum": [
                                  "included",
                                  "per_person",
                                  "per_booking",
                                  "on_request",
                                  "unavailable"
                                ]
                              },
                              "defaultQuantity": {
                                "type": ["integer", "null"]
                              },
                              "minQuantity": {
                                "type": ["integer", "null"]
                              },
                              "maxQuantity": {
                                "type": ["integer", "null"]
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "label",
                              "required",
                              "selectable",
                              "hasOptions",
                              "refProductId",
                              "thumb",
                              "pricePerPerson",
                              "currencyCode",
                              "pricingMode",
                              "defaultQuantity",
                              "minQuantity",
                              "maxQuantity"
                            ]
                          }
                        },
                        "details": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "object",
                            "properties": {
                              "description": {
                                "type": ["string", "null"]
                              },
                              "media": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "url": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "alt": {
                                      "type": ["string", "null"],
                                      "minLength": 1
                                    }
                                  },
                                  "required": ["url", "alt"]
                                }
                              }
                            },
                            "required": ["description", "media"]
                          }
                        },
                        "currencyCode": {
                          "type": "string"
                        }
                      },
                      "required": ["extensions", "items", "details", "currencyCode"]
                    }
                  },
                  "required": ["data"]
                }
              }
            }
          }
        },
        "operationId": "getPublicProductsByProductIdExtensions",
        "summary": "GET /v1/public/products/{productId}/extensions",
        "tags": ["storefront"],
        "x-voyant-module": "storefront",
        "x-voyant-surface": "storefront",
        "x-voyant-api-id": "@voyant-travel/storefront#api.public",
        "x-voyant-unit-id": "@voyant-travel/storefront",
        "x-voyant-package-name": "@voyant-travel/storefront"
      }
    }
  },
  "webhooks": {}
}
