{
  "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/admin/catalog/search": {
      "post": {
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "vertical": {
                    "type": "string",
                    "minLength": 1
                  },
                  "query": {
                    "type": "string"
                  },
                  "mode": {
                    "type": "string",
                    "enum": ["keyword", "semantic", "hybrid"]
                  },
                  "sort": {
                    "type": "string",
                    "enum": ["relevance", "price-asc", "price-desc", "departure-asc", "newest"]
                  },
                  "projection": {
                    "type": "string",
                    "enum": ["raw", "storefront-card"]
                  },
                  "filters": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/CatalogSearchFilter"
                    }
                  },
                  "facets": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "field": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "exclusiveMinimum": 0
                        }
                      },
                      "required": ["field"]
                    }
                  },
                  "pagination": {
                    "type": "object",
                    "properties": {
                      "limit": {
                        "type": "integer",
                        "exclusiveMinimum": 0
                      },
                      "cursor": {
                        "type": "string"
                      }
                    }
                  },
                  "alpha": {
                    "type": "number"
                  },
                  "distance_threshold": {
                    "type": "number"
                  },
                  "query_embedding": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  },
                  "market": {
                    "type": "string",
                    "minLength": 1
                  },
                  "locale": {
                    "type": "string",
                    "minLength": 1
                  },
                  "channel": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Search results for the requested vertical slice",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "vertical": {
                      "type": "string"
                    },
                    "mode": {
                      "type": "string",
                      "enum": ["keyword", "semantic", "hybrid"]
                    },
                    "total": {
                      "type": "number"
                    },
                    "totalRelation": {
                      "type": "string",
                      "enum": ["eq", "gte"]
                    },
                    "next_cursor": {
                      "type": "string"
                    },
                    "hits": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "score": {
                            "type": "number"
                          },
                          "document": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "fields": {
                                "type": "object",
                                "additionalProperties": {}
                              },
                              "embeddings": {
                                "type": "object",
                                "additionalProperties": {
                                  "type": "array",
                                  "items": {
                                    "type": "number"
                                  }
                                }
                              },
                              "embedding_model_id": {
                                "type": "string"
                              }
                            },
                            "required": ["id", "fields"]
                          }
                        },
                        "required": ["id", "score", "document"]
                      }
                    },
                    "cards": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": ["string", "null"]
                          },
                          "slug": {
                            "type": ["string", "null"]
                          },
                          "primaryCategory": {
                            "type": ["object", "null"],
                            "properties": {
                              "id": {
                                "type": ["string", "null"]
                              },
                              "name": {
                                "type": ["string", "null"]
                              },
                              "slug": {
                                "type": ["string", "null"]
                              }
                            },
                            "required": ["id", "name", "slug"]
                          },
                          "media": {
                            "type": "object",
                            "properties": {
                              "thumbnailUrl": {
                                "type": ["string", "null"]
                              },
                              "coverMediaUrl": {
                                "type": ["string", "null"]
                              }
                            },
                            "required": ["thumbnailUrl", "coverMediaUrl"]
                          },
                          "priceFrom": {
                            "type": ["object", "null"],
                            "properties": {
                              "amountCents": {
                                "type": "number"
                              },
                              "currency": {
                                "type": ["string", "null"]
                              },
                              "originalAmountCents": {
                                "type": ["number", "null"]
                              }
                            },
                            "required": ["amountCents", "currency", "originalAmountCents"]
                          },
                          "offerBadges": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": ["string", "null"]
                                },
                                "name": {
                                  "type": ["string", "null"]
                                },
                                "discountKind": {
                                  "type": ["string", "null"]
                                },
                                "discountPercent": {
                                  "type": ["number", "null"]
                                },
                                "discountAmountCents": {
                                  "type": ["number", "null"]
                                },
                                "minPax": {
                                  "type": ["number", "null"]
                                }
                              },
                              "required": [
                                "id",
                                "name",
                                "discountKind",
                                "discountPercent",
                                "discountAmountCents"
                              ]
                            }
                          },
                          "departures": {
                            "type": "object",
                            "properties": {
                              "upcomingCount": {
                                "type": ["number", "null"]
                              },
                              "nextDepartureAt": {
                                "type": ["string", "null"]
                              },
                              "nextDepartureDate": {
                                "type": ["string", "null"]
                              },
                              "months": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "dates": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              }
                            },
                            "required": [
                              "upcomingCount",
                              "nextDepartureAt",
                              "nextDepartureDate",
                              "months",
                              "dates"
                            ]
                          },
                          "destinations": {
                            "type": "object",
                            "properties": {
                              "regions": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "countries": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "cities": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "ids": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "slugs": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              }
                            },
                            "required": ["regions", "countries", "cities", "ids", "slugs"]
                          },
                          "coordinates": {
                            "type": ["object", "null"],
                            "properties": {
                              "latitude": {
                                "type": "number"
                              },
                              "longitude": {
                                "type": "number"
                              }
                            },
                            "required": ["latitude", "longitude"]
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "slug",
                          "primaryCategory",
                          "media",
                          "priceFrom",
                          "offerBadges",
                          "departures",
                          "destinations",
                          "coordinates"
                        ]
                      }
                    },
                    "facets": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            },
                            "count": {
                              "type": "number"
                            }
                          },
                          "required": ["value", "count"]
                        }
                      }
                    }
                  },
                  "required": ["vertical", "mode", "total", "hits", "facets"]
                }
              }
            }
          },
          "400": {
            "description": "invalid_request — body failed validation, or `vertical` is missing",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          },
          "500": {
            "description": "Search execution failed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          },
          "503": {
            "description": "Search indexer is not configured for this deployment",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogSearch",
        "summary": "POST /v1/admin/catalog/search",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    },
    "/v1/admin/catalog/package-offers": {
      "post": {
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Live dated offers for one accommodation (+ hero fields), or a soft fallback",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "product": {},
                    "offers": {
                      "type": "array",
                      "items": {}
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["offers"]
                }
              }
            }
          },
          "400": {
            "description": "invalid_request — body failed validation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "details": {}
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogPackageOffers",
        "summary": "POST /v1/admin/catalog/package-offers",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    },
    "/v1/admin/catalog/package-detail": {
      "post": {
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Full accommodation detail + live offers + resolved provenance",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "product": {},
                    "offers": {
                      "type": "array",
                      "items": {}
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "source": {
                      "type": "object",
                      "properties": {
                        "connectionId": {
                          "type": "string"
                        },
                        "ref": {
                          "type": ["string", "null"]
                        }
                      },
                      "required": ["connectionId", "ref"]
                    },
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["offers"]
                }
              }
            }
          },
          "400": {
            "description": "invalid_request — body failed validation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "details": {}
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogPackageDetail",
        "summary": "POST /v1/admin/catalog/package-detail",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    },
    "/v1/admin/catalog/package-search": {
      "post": {
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cheapest live offer per (hotel, date, origin) across a destination",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "offers": {
                      "type": "array",
                      "items": {}
                    },
                    "departureAirports": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          }
                        },
                        "required": ["code", "label"]
                      }
                    },
                    "currency": {
                      "type": "string"
                    },
                    "sampledHotels": {
                      "type": "number"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "error": {
                      "type": "string"
                    }
                  },
                  "required": ["offers"]
                }
              }
            }
          },
          "400": {
            "description": "invalid_request — body failed validation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "details": {}
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogPackageSearch",
        "summary": "POST /v1/admin/catalog/package-search",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    },
    "/v1/admin/catalog/departure-airports": {
      "post": {
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Distinct departure airports for a destination (soft-empty on any failure)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "departureAirports": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          }
                        },
                        "required": ["code", "label"]
                      }
                    }
                  },
                  "required": ["departureAirports"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogDepartureAirports",
        "summary": "POST /v1/admin/catalog/departure-airports",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    },
    "/v1/admin/catalog/cruise-price": {
      "post": {
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cruise-level from-price from the Connect summary (nulls when unavailable)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fromAmountMinor": {
                      "type": ["number", "null"]
                    },
                    "currency": {
                      "type": ["string", "null"]
                    }
                  },
                  "required": ["fromAmountMinor", "currency"]
                }
              }
            }
          },
          "400": {
            "description": "invalid_request — body failed validation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "details": {}
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogCruisePrice",
        "summary": "POST /v1/admin/catalog/cruise-price",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    },
    "/v1/admin/catalog/cruise-sailing-pricing": {
      "post": {
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cheapest available price per cabin for one sailing in a single currency",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "cabins": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string"
                          },
                          "fromAmountMinor": {
                            "type": "number"
                          },
                          "available": {
                            "type": "boolean"
                          }
                        },
                        "required": ["code", "fromAmountMinor", "available"]
                      }
                    },
                    "currency": {
                      "type": ["string", "null"]
                    },
                    "retryable": {
                      "type": "boolean"
                    }
                  },
                  "required": ["cabins", "currency"]
                }
              }
            }
          },
          "400": {
            "description": "invalid_request — body failed validation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "details": {}
                  },
                  "required": ["error"]
                }
              }
            }
          }
        },
        "operationId": "postAdminCatalogCruiseSailingPricing",
        "summary": "POST /v1/admin/catalog/cruise-sailing-pricing",
        "tags": ["catalog"],
        "x-voyant-module": "catalog",
        "x-voyant-surface": "admin"
      }
    }
  },
  "webhooks": {}
}
