Content
About
Vio.com makes static hotel content available to partners via SFTP on request. Contact your account manager to set up your credentials.
FAQ
Are files overwritten or are snapshots stored in the SFTP?
Hotel content data is updated usually once daily. We replace the previous file with a new one. If you want to keep snapshots of the exported hotel content, we recommended you set up a process to download and store it daily.
To identify if the content of one particular hotel has been updated, you can check the value of the updated_at
timestamp for the corresponding id
.
How often do we make breaking changes?
Breaking changes always go to a new major version of the dataset. This happens rarely and we keep the previous major version available until all partners migrate to the new major version.
How will we communicate them?
An announcement will be published in this portal and your account manager will contact you.
How can partners handle breaking changes?
We will provide specific migration instructions for every major version with breaking changes.
What about updates to attribute ids and values?
Values are potentially updated on every snapshot export. We monitor data quality metrics, so big population changes are always under control. Attribute IDs are guaranteed to be consistent, i.e. foreign keys can always reference existing IDs.
Schema
This is the JSON schema of the hotel content export. You can use it to validate the data. It is also available under schemas/HotelFtpExport.json
in the SFTP server.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://developers.vio.com/docs/content/schemas/HotelFtpExport.json",
"definitions": {
"relaxed_translation": {
"type": "object",
"properties": {
"en": {
"description": "English value of this field",
"type": "string",
"minLength": 1
}
}
},
"additionalProperties": {
"type": "string"
},
"translation": {
"$ref": "#/definitions/relaxed_translation"
}
},
"type": "object",
"required": [
"id",
"name",
"location"
],
"properties": {
"id": {
"description": "Unique ID",
"type": "string",
"minLength": 1
},
"name": {
"description": "Property name",
"$ref": "#/definitions/translation"
},
"location": {
"description": "Information regarding the geographic location of this property",
"type": "object",
"required": [
"country_code",
"address",
"coordinates"
],
"properties": {
"address": {
"description": "property address",
"$ref": "#/definitions/translation"
},
"city": {
"type": "string",
"description": "City"
},
"coordinates": {
"type": "object",
"properties": {
"latitude": {
"description": "The latitude of the property",
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"description": "The longitude of the property",
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
]
},
"country_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code",
"pattern": "^[A-Z]{2}$"
},
"state_province": {
"type": "string",
"description": "State or province, if applicable"
}
}
},
"images": {
"type": "array",
"minItems": 1,
"description": "Property images",
"items": {
"type": "object",
"properties": {
"method": {
"description": "HTTP method to use for URI retrieval",
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE",
"CONNECT",
"OPTIONS",
"TRACE"
]
},
"href": {
"type": "string",
"description": "URI of image field",
"format": "uri"
},
"caption": {
"description": "Image captions",
"$ref": "#/definitions/translation"
},
"hero_image": {
"type": "boolean",
"description": "Hero image"
},
"category": {
"type": "array",
"description": "Image categories",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Category ID",
"minLength": 1
},
"name": {
"type": "string",
"description": "Category Name",
"minLength": 1
}
}
}
},
"allow_cache": {
"type": "boolean",
"description": "Allow caching of this image"
}
}
}
},
"check_in": {
"type": "object",
"description": "Checkin information",
"properties": {
"begin_time": {
"type": "string",
"description": "Begin time",
"pattern": "^[01][0-9]|2[0-3]:[0-5][0-9]$"
},
"end_time": {
"type": "string",
"description": "End time",
"pattern": "^[01][0-9]|2[0-3]:[0-5][0-9]$"
},
"instructions": {
"description": "Checkin instructions",
"$ref": "#/definitions/translation"
},
"special_instructions": {
"description": "Checkin special instructions",
"$ref": "#/definitions/translation"
},
"min_age": {
"type": "integer",
"description": "Minimum age for checkin",
"minimum": 0
},
"max_age": {
"type": "integer",
"description": "Maximum age for checkin",
"exclusiveMinimum": 0
},
"24_hour": {
"type": "boolean",
"description": "Is 24 hour checkin"
}
}
},
"check_out": {
"type": "object",
"description": "Checkout information",
"properties": {
"begin_time": {
"type": "string",
"description": "Begin time",
"pattern": "^[01][0-9]|2[0-3]:[0-5][0-9]$"
},
"end_time": {
"type": "string",
"description": "End time",
"pattern": "^[01][0-9]|2[0-3]:[0-5][0-9]$"
},
"policy": {
"description": "Checkout policy",
"$ref": "#/definitions/translation"
}
}
},
"key_collection_info": {
"type": "object",
"description": "Key collection information",
"properties": {
"key_location": {
"description": "Key location",
"$ref": "#/definitions/translation"
},
"how_to_collect": {
"description": "How to collect key",
"$ref": "#/definitions/translation"
},
"alternative_key_location": {
"type": "object",
"description": "Alternative key location",
"properties": {
"city": {
"type": "string",
"description": "City for key collection",
"minLength": 1
},
"zip": {
"type": "string",
"description": "Zip code for key collection",
"minLength": 1
},
"address": {
"description": "Address for key collection",
"$ref": "#/definitions/translation"
}
}
}
}
},
"policies": {
"type": "object",
"description": "Property policies",
"properties": {
"know_before_you_go": {
"description": "Know before you go policies",
"$ref": "#/definitions/translation"
},
"nationality_restrictions": {
"description": "Nationality restrictions",
"$ref": "#/definitions/translation"
},
"health_and_safety": {
"type": "object",
"description": "Health and safety policies",
"properties": {
"enhanced_cleaning_practices": {
"type": ["boolean", "null"]
},
"cleaned_with_disinfectant": {
"type": ["boolean", "null"]
},
"self_check_in_and_check_out": {
"type": ["boolean", "null"]
},
"gap_between_stays": {
"type": ["boolean", "null"]
}
}
}
}
},
"payment_information": {
"type": "object",
"description": "Payment information",
"properties": {
"currency": {
"type": "string",
"description": "Payment currency",
"minLength": 1
},
"payment_registration_recommended": {
"type": "boolean",
"description": "Payment registration recommended"
},
"creditcard_required": {
"type": "boolean",
"description": "Credit card required for payment"
},
"book_domestic_without_cc_details": {
"type": "boolean",
"description": "Book domestic without credit card details"
},
"accepted_credit_cards": {
"type": "array",
"description": "Accepted credit cards",
"minItems": 1,
"items": {
"type": "object",
"description": "Credit card",
"properties": {
"card_name": {
"type": "string",
"description": "Card provider",
"minLength": 1
},
"card_type": {
"type": ["string", "null"],
"description": "Card type",
"minLength": 1
}
}
}
},
"fees": {
"type": "object",
"description": "Property fees",
"properties": {
"mandatory": {
"description": "Mandatory fees",
"$ref": "#/definitions/translation"
},
"optional": {
"description": "Optional fees",
"$ref": "#/definitions/translation"
},
"deposit": {
"description": "Deposit fees",
"type": "object",
"properties": {
"amount": {
"description": "Amount of the deposit fee",
"type": "number",
"exclusiveMinimum": 0
},
"currency": {
"description": "Currency of the deposit fee",
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"description": {
"description": "Description of the deposit fee/fees",
"$ref": "#/definitions/translation"
}
}
}
}
},
"onsite_payments": {
"type": "object",
"description": "Onsite payments",
"properties": {
"currency": {
"type": "string",
"description": "Fee currency",
"minLength": 1
},
"types": {
"type": "array",
"description": "Fee types",
"minItems": 1,
"items": {
"type": "string"
}
}
}
}
}
},
"default_language": {
"type": "string",
"description": "Default property language",
"minLength": 1
},
"spoken_languages": {
"type": "array",
"description": "Spoken languages at the property",
"items": {
"type": "string",
"minLength": 1
}
},
"descriptions": {
"type": "object",
"description": "Property descriptions",
"properties": {
"overall": {
"$ref": "#/definitions/relaxed_translation"
},
"business_amenities": {
"$ref": "#/definitions/relaxed_translation"
},
"rooms": {
"$ref": "#/definitions/relaxed_translation"
},
"attractions": {
"$ref": "#/definitions/relaxed_translation"
},
"location": {
"$ref": "#/definitions/relaxed_translation"
},
"headline": {
"$ref": "#/definitions/relaxed_translation"
},
"amenities": {
"$ref": "#/definitions/relaxed_translation"
},
"dining": {
"$ref": "#/definitions/relaxed_translation"
},
"renovations": {
"$ref": "#/definitions/relaxed_translation"
},
"national_ratings": {
"$ref": "#/definitions/relaxed_translation"
}
}
},
"legal": {
"type": "object",
"description": "Property legal information",
"properties": {
"license": {
"type": "string",
"description": "Property license",
"minLength": 1
},
"registry_number": {
"type": "string",
"description": "Property registry number",
"minLength": 1
},
"tax_id": {
"type": "string",
"description": "Property tax id",
"minLength": 1
}
}
},
"vr_details": {
"type": "object",
"description": "Vacation rental details",
"properties": {
"bathrooms": {
"type": "object",
"description": "Bathroom info",
"properties": {
"count": {
"type": "number",
"description": "Bathroom count",
"minimum": 0
}
}
},
"bedrooms": {
"type": "object",
"description": "Bedroom info",
"properties": {
"count": {
"type": "number",
"description": "Bedroom count",
"exclusiveMinimum": 0
},
"bed_types": {
"type": "array",
"description": "Bed types",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
}
}
},
"house_rules": {
"type": "object",
"description": "House Rules",
"properties": {
"child_rules": {
"type": "object",
"description": "Child rules",
"properties": {
"owner_children_free_text": {
"$ref": "#/definitions/translation"
},
"children_permitted": {
"type": "boolean"
}
}
},
"party_or_event_rules": {
"type": ["object", "null"],
"description": "Party or event rules",
"properties": {
"owner_party_free_text": {
"$ref": "#/definitions/translation"
},
"parties_or_events_permitted": {
"type": "boolean"
}
}
},
"pet_rules": {
"type": ["object", "null"],
"description": "Pet rules",
"properties": {
"owner_pets_free_text": {
"$ref": "#/definitions/translation"
},
"pets_permitted": {
"type": "boolean"
}
}
},
"smoking_rules": {
"type": ["object", "null"],
"description": "Smoking rules",
"properties": {
"owner_smoking_free_text": {
"$ref": "#/definitions/translation"
},
"smoking_permitted": {
"type": "boolean"
}
}
}
}
},
"max_occupancy": {
"type": ["integer", "null"],
"description": "Maximum occupancy",
"exclusiveMinimum": 0
},
"property_size": {
"type": "object",
"description": "Property size",
"properties": {
"measurement": {
"type": "number",
"description": "Measurement value"
},
"units": {
"type": "string",
"description": "Measurement unit",
"minLength": 1
}
}
},
"property_manager": {
"type": "object",
"description": "Property manager",
"properties": {
"name": {
"type": "string",
"description": "Property manager name",
"minLength": 1
},
"method": {
"description": "HTTP method to use for URI retrieval",
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE",
"CONNECT",
"OPTIONS",
"TRACE"
]
},
"href": {
"type": "string",
"description": "URI of property manager",
"format": "uri"
}
}
}
}
},
"property_type": {
"description": "The type of this property. Can be either id or actual type",
"type": "string"
},
"is_pet_friendly": {
"type": "boolean"
},
"is_vr": {
"type": "boolean"
},
"mappings": {
"type": "object",
"description": "Mapping to other provider properties",
"patternProperties": {
"^[A-Z]{3}$": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"updated_at": {
"type": "string",
"description": "Last updated date of the property",
"pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d{3} Z$",
"examples": [
"2025-05-07 11:17:25.589 Z"
]
}
}
}