{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/ecoaloha-com/json-schema/ecoaloha-com-collection-schema.json",
  "title": "Collection",
  "x-generated": "2026-11-06",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/ecoaloha-com-openapi.json#/components/schemas/Collection",
  "type": "object",
  "required": [
    "slug",
    "title",
    "description",
    "destinationId",
    "experienceIds",
    "status"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "destinationId": {
      "type": "string",
      "enum": [
        "amsterdam",
        "anchorage",
        "antalya",
        "athens",
        "auckland",
        "bali",
        "banff",
        "bangkok",
        "barcelona",
        "bergen",
        "berlin",
        "bilbao",
        "bordeaux",
        "boston",
        "brisbane",
        "bruges",
        "brussels",
        "budapest",
        "buenos-aires",
        "cairo",
        "cancun",
        "cape-town",
        "cappadocia",
        "caribbean-coast",
        "cartagena",
        "central-pacific",
        "chiang-mai",
        "chicago",
        "christchurch",
        "cologne",
        "colombo",
        "copenhagen",
        "crete",
        "cusco",
        "denver",
        "dubai",
        "dublin",
        "dubrovnik",
        "edinburgh",
        "florence",
        "frankfurt",
        "funchal",
        "geneva",
        "guanacaste-northwest",
        "hamburg",
        "hanoi",
        "helsinki",
        "ho-chi-minh-city",
        "hobart",
        "honolulu",
        "innsbruck",
        "interlaken",
        "istanbul",
        "jaco",
        "kathmandu",
        "krakow",
        "kuala-lumpur",
        "kyoto",
        "la-fortuna",
        "las-vegas",
        "lima",
        "limon",
        "lisbon",
        "ljubljana",
        "london",
        "los-angeles",
        "lucerne",
        "lyon",
        "madrid",
        "malaga",
        "manchester",
        "marrakech",
        "marseille",
        "melbourne",
        "mexico-city",
        "miami",
        "milan",
        "monteverde",
        "montreal",
        "munich",
        "muscat",
        "nairobi",
        "naples",
        "new-orleans",
        "new-york",
        "nice",
        "oaxaca",
        "osaka",
        "oslo",
        "palermo",
        "palma-de-mallorca",
        "paris",
        "perth",
        "phuket",
        "ponta-delgada",
        "portland",
        "porto",
        "prague",
        "puntarenas",
        "quebec-city",
        "queenstown",
        "quepos",
        "quito",
        "reykjavik",
        "rio-de-janeiro",
        "rome",
        "rotterdam",
        "salzburg",
        "san-diego",
        "san-francisco",
        "san-jose",
        "santa-teresa",
        "santiago",
        "santorini",
        "seattle",
        "seoul",
        "seville",
        "singapore",
        "split",
        "stockholm",
        "sydney",
        "taipei",
        "tokyo",
        "toronto",
        "tromso",
        "valencia",
        "vancouver",
        "venice",
        "vienna",
        "warsaw",
        "washington-dc",
        "zagreb",
        "zurich"
      ],
      "description": "Approved destination id from list_destinations."
    },
    "experienceIds": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,80}$",
        "description": "Viator product code, for example 5010SYDNEY."
      }
    },
    "status": {
      "type": "string",
      "enum": [
        "published"
      ]
    },
    "filters": {
      "type": "object"
    },
    "guide": {
      "type": "object",
      "required": [
        "eyebrow",
        "hero",
        "intro",
        "facts",
        "highlights",
        "itinerary",
        "practical",
        "sources"
      ],
      "properties": {
        "eyebrow": {
          "type": "string"
        },
        "hero": {
          "type": "object",
          "required": [
            "src",
            "alt",
            "credit",
            "sourceUrl",
            "license",
            "licenseUrl"
          ],
          "properties": {
            "src": {
              "type": "string",
              "description": "Local image path or HTTPS image URL."
            },
            "kind": {
              "type": "string",
              "enum": [
                "photograph",
                "illustration"
              ]
            },
            "alt": {
              "type": "string"
            },
            "caption": {
              "type": "string"
            },
            "width": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000
            },
            "height": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000
            },
            "variants": {
              "type": "array",
              "minItems": 1,
              "maxItems": 4,
              "items": {
                "type": "object",
                "required": [
                  "src",
                  "width"
                ],
                "additionalProperties": false,
                "properties": {
                  "src": {
                    "type": "string",
                    "pattern": "^/images/[a-zA-Z0-9/_-]+\\.webp$"
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000
                  }
                }
              }
            },
            "credit": {
              "type": "string"
            },
            "creator": {
              "type": "string"
            },
            "copyrightNotice": {
              "type": "string"
            },
            "attributionRequired": {
              "type": "boolean",
              "description": "Only false when the verified license permits omission of the creator credit."
            },
            "sourceUrl": {
              "type": "string",
              "format": "uri"
            },
            "license": {
              "type": "string"
            },
            "licenseUrl": {
              "type": "string",
              "format": "uri"
            }
          }
        },
        "intro": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "localActivities": {
          "type": "array",
          "maxItems": 20,
          "description": "Curated direct operator links. Prices and availability are not live provider data.",
          "items": {
            "type": "object",
            "required": [
              "title",
              "description",
              "url"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri",
                "pattern": "^https://"
              }
            }
          }
        },
        "facts": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "value"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            }
          }
        },
        "highlights": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "title",
              "description"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "image": {
                "type": "object",
                "required": [
                  "src",
                  "alt",
                  "credit",
                  "sourceUrl",
                  "license",
                  "licenseUrl"
                ],
                "properties": {
                  "src": {
                    "type": "string",
                    "description": "Local image path or HTTPS image URL."
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "photograph",
                      "illustration"
                    ]
                  },
                  "alt": {
                    "type": "string"
                  },
                  "caption": {
                    "type": "string"
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10000
                  },
                  "variants": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 4,
                    "items": {
                      "type": "object",
                      "required": [
                        "src",
                        "width"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "src": {
                          "type": "string",
                          "pattern": "^/images/[a-zA-Z0-9/_-]+\\.webp$"
                        },
                        "width": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 10000
                        }
                      }
                    }
                  },
                  "credit": {
                    "type": "string"
                  },
                  "creator": {
                    "type": "string"
                  },
                  "copyrightNotice": {
                    "type": "string"
                  },
                  "attributionRequired": {
                    "type": "boolean",
                    "description": "Only false when the verified license permits omission of the creator credit."
                  },
                  "sourceUrl": {
                    "type": "string",
                    "format": "uri"
                  },
                  "license": {
                    "type": "string"
                  },
                  "licenseUrl": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              }
            }
          }
        },
        "itinerary": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "title",
              "description"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            }
          }
        },
        "practical": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "title",
              "description"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            }
          }
        },
        "sources": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "title",
              "url"
            ],
            "properties": {
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}