1. Room Mapping
Vervotech
  • Hotel Mapping
    • Getting Started
    • Access & Onboarding with Vervotech
    • Explore your providers
    • Integration and Go Live
    • Map Providers Content
    • Webhook
    • References
    • FAQ
    • Metadata Content
      • Get Master Hotel Facilities
      • Get Master Hotel Chains
      • Get Master Hotel Brands
      • Get Master Property Types
      • Get All Master Countries
      • Get All Vervotech IDs
    • Mappings
      • Get Mappings
      • Get New Mappings
      • Get Updated Mappings
      • Get Deleted Mappings
      • Get Mapping Statistics
      • Export Mappings File
      • Get Mapping Counts
      • Get Provider Hotel Mappings by Provider ID
      • Get Provider Hotel Mappings by Vervotech ID
    • Curated Content
      • Get Updated Curated Content
      • Get Curated Content by Provider Hotel IDs
      • Get Curated Content by Vervotech IDs
    • Provider Content
      • Get Unmapped Provider Hotels
      • Get Unmapped Provider Hotels V2
      • Create Unmapped Provider Hotels File
      • Get All Provider Names
      • Get Provider Content by Provider Hotel IDs
      • Get Provider Content by Vervotech IDs
    • Location Content
      • Get Location by ID
      • Get All Locations
    • Operational APIs
      • Review Mappings of Booked Hotels by File
      • Review Mappings of Booked Hotels
      • Start Mapping by SFTP Folder
      • Get Mapping History by Run ID
    • Dynamic Mapping APIs
      • Find Match
    • Dual Mapping APIs
      • Overview
      • Get Mappings by Provider Hotel ID
      • Get Mappings with Content by Provider Hotel ID
      • Get Dual Mapping API Statistics
  • Room Mapping
    • Getting Started
    • Choosing Your Integration Path
    • Integration Guidelines and Go Live
    • Preparing Your Request Data
    • Room Name and Description Guidelines
    • Room Mapping Customizations
    • Preparing Your Files
    • How Supplier Content Is Standardised
    • Service Limits
    • References
    • FAQ
    • Mapping API
      • Map Rooms
      • Get Master Room Amenities
      • Get Master Room Attributes
      • Get Provider Names
      • Get All Provider Names
    • Async Room Mapping API
      • Get Async Room Mapping Response
      • Map Large Rooms Async
    • Board Basis Mappings
      • Get All Master Board Basis
      • Map Board Basis
  • Schemas
    • Schemas
    • Response
      • GetMasterHotelBrandsResponse
      • GetMasterPropertyTypesResponse
      • GetMasterCountriesResponse
      • FacilityGroupFixtures
      • GetMasterHotelChainsResponse
    • GetMasterHotelBrandsResponse1
    • GetMasterPropertyTypesResponse2
    • GetMasterCountriesResponse3
    • FacilityGroupFixtures4
    • GetMasterHotelChainsResponse5
    • GetMasterHotelBrandsResponse2
    • GetMasterPropertyTypesResponse3
    • GetMasterCountriesResponse4
    • PropertyContent400Error
    • FacilityGroupFixtures5
    • PropertyContent404Error
    • GetMasterHotelChainsResponse6
    • HotelChain404Error
    • MasterCountry404Error
    • BucketFolderNotFound
    • ProviderNames404Error
    • PropertyType404Error
    • Error401
    • Error403
    • Error426
    • Error500
    • Error503
    • Facility404Error
    • TotalHotelsCount404Error
    • Location404Error
    • Location400Error
    • GetMasterHotelBrandsResponse3
    • GetMasterPropertyTypesResponse4
    • GetMasterCountriesResponse5
    • FacilityGroupFixtures6
    • GetMasterHotelChainsResponse7
    • Status
    • Message
    • StatusCode
    • ResumeKey
    • Tag
    • GetHotelsByLocationIdRes
    • GetHotelsByPolygonRes
    • Unica.Core.Contracts.Models.DownloadStatsStatus
    • Unica.Core.Contracts.Models.HotelsAPI.HotelContentField
    • PropertyTypes
    • schema1
    • schema3
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.ProviderMappingType
    • Unica.Core.Contracts.Models.ImageSize
    • Unica.DataContracts.Common.DistanceUnit
    • Unica.DataContracts.Common.FeeType
    • Unica.DataContracts.Common.ImageSize
    • Unica.Services.CoreService.Models.GetProviderMappingMappingRq
    • Countries
    • KeyValue
    • ProviderFacility
    • GenericResponse
    • ProviderHotelIdentifier
    • GetUnmappedHotelsResponse
    • GetMasterHotelChainsResponse
    • GetUnmappedHotelsV2Response
    • GetCuratedContentResponse
    • ErrorResponse
    • Bed
    • GetUpdatedCuratedContentResponse
    • ReviewMappingsofBookedHotelsResponse
    • GetProviderMappingResponse
    • GetProviderMappingByProviderResponse
    • GetMappingHistoryByRunIdResponse
    • CategoryRating
    • GetMasterHotelBrandsResponse
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetOSMLocationsRQ
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetProviderContentByProviderIdsReq
    • GetMasterPropertyTypesResponse
    • GetMasterCountriesResponse
    • Error
    • LocationsRS
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.ProviderHotelMappings
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.ReviewBookedHotelsReq
    • Unica.Core.Contracts.Models.MasterTags.Tags
    • Unica.Core.Contracts.Models.ProviderHotelIdentifier
    • Unica.DataContracts.Common.CategoryRating
    • Unica.DataContracts.Common.CheckoutInfo
    • Unica.DataContracts.Common.Description
    • Unica.DataContracts.Common.GeoCode
    • Unica.DataContracts.Common.Link
    • Unica.DataContracts.Common.Policy
    • Unica.DataContracts.Common.ReviewDistribution
    • Unica.Core.Contracts.Location.MasterLocationRes
    • GetMappingsCountRes
    • Unica.Core.Contracts.Models.Airport
    • Unica.Core.Contracts.Models.ApiResponse
    • Unica.Core.Contracts.Models.Billing.AccountUsageBalance
    • Unica.Core.Contracts.Models.Billing.BilllingHistory
    • Unica.Core.Contracts.Models.ConnectedLocation
    • Unica.Core.Contracts.Models.Facility
    • AsyncRoomMappingResponse
    • Unica.Core.Contracts.Models.GetAllHotelBrandsRes
    • GetMappingStatisticsResponse
    • Unica.Core.Contracts.Models.GetAllHotelChainsRes
    • Unica.Core.Contracts.Models.GetAllMasterTagsResV3
    • Unica.Core.Contracts.Models.GetMappingHistoryReq
    • Facility
    • NearByLocation
    • TrainStations
    • StartMappingByFtpFolderResponse
    • PointOfInterests
    • ConnectedLocations
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetCuratedContentWithLocationRes
    • Neighbourhoods
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetMappingByProviderRes
    • Stadiums
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetMasterFacilityGroups
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetProviderContentRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetUnmappedProviderHotelsRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.MasterFacilityGroups
    • Unica.Core.Contracts.Models.KeyValue
    • Unica.Core.Contracts.Models.Link
    • Unica.Core.Contracts.Models.MappingStatsRes
    • Unica.Core.Contracts.Models.MasterChain.HotelBrand
    • Unica.Core.Contracts.Models.MasterChain.HotelChain
    • Unica.Core.Contracts.Models.Neighbourhood
    • Unica.Core.Contracts.Models.PoI
    • Unica.Core.Contracts.Models.ProviderHotelHistoryRes
    • Unica.Core.Contracts.Models.RoomArea
    • Unica.Core.Contracts.Models.Stadium
    • Unica.Core.Contracts.Models.TrainStation
    • Unica.DataContracts.Common.Facility
    • Unica.DataContracts.Common.Fee
    • Unica.DataContracts.Common.KeyValue
    • Unica.DataContracts.Common.RoomArea
    • Unica.DataContracts.Common.Statistics
    • Unica.Core.Contracts.Location.MasterLocationListRes
    • Unica.Core.Contracts.Models.Bed
    • LocationByPolygonRequest
    • ProviderHotelIdentifiers
    • Unica.Core.Contracts.Models.Billing.UsageBalanceDetails
    • MappedRoomRate
    • HotelProviderIdentifier
    • Unica.Core.Contracts.Models.GetAllCountriesResV3
    • Unica.Core.Contracts.Models.GetAllPropertyTypesRes
    • GuestReview
    • Unica.Core.Contracts.Models.GetMappingsCountRes
    • GetProviderNamesResponse
    • Unica.Core.Contracts.Models.GetProviderMappingStatsRS
    • GetAllVervotechIdsResponse
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.CreateUnmappedProviderHotelsFileReq
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetCuratedContentByVervotechIdsReq
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetMappingsRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetUnmappedProviderHotelsReq
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetUnmappedProviderHotelsV2Req
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetUnmappedProviderHotelsV2Res
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetUpdatedCuratedContentRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetVervotechIdsRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.HotelProviderIdentifierV3
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.ProviderHotelIdsRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.ProviderMapping
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.ProviderMappingRes
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.StartMappingByFtpFolderRes
    • Unica.Core.Contracts.Models.Image
    • Unica.DataContracts.Common.Bed
    • Unica.DataContracts.Common.Contact
    • Unica.DataContracts.Common.Image
    • Unica.DataContracts.Common.PointOfInterest
    • Unica.Host.Web.Controllers.GetProviderNamesRes
    • RoomMappingRequest
    • HotelChains
    • LocationMapping
    • HotelBrands
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.GetProviderContentByVervotechIdsReq
    • schema2
    • Unica.Core.Contracts.Models.VerifyMapping
    • Unica.DataContracts.Common.CheckinInfo
    • Unica.DataContracts.Common.GuestReview
    • Unica.DataContracts.Common.UserReview
    • Unica.Services.CoreService.Models.HotelMappingReq
    • HotelMapping
    • NewHotelMapping
    • UpdatedHotelMapping
    • DeletedHotelMapping
    • Unica.Core.Contracts.Models.MasterLocation.LocationMappingRes
    • Unica.Core.Contracts.Models.ProviderHotelHistory
    • Unica.DataContracts.Common.Address
    • Unica.DataContracts.Common.Room
    • ReviewHotels
    • ReviewMappingsofBookedHotelsRequest
    • Unica.Core.Contracts.Models.Billing.BillingEntry
    • GetMasterRoomAmenitiesResponse
    • GetProviderContentResponse
    • GetProviderContentByHotelIdsResponse
    • Room
    • Unica.Core.Contracts.Models.ProviderMappingStats
    • Unica.DataContracts.MasterLocation.MasterLocation
    • Locations
    • Unica.Core.Contracts.Models.Room
    • RoomMappingBody2
    • ProviderMappingsStats
    • GetMasterRoomAttributesResponse
    • FacilityGroupFixtures
    • GetProviderHotelIdsByVervotechIdResponse
    • RoomMappingBody
    • Unica.Core.Contracts.Models.MappingStats
    • MappingsStats
    • HotelsByLocationIdRes
    • UnmappedHotelContent
    • Unica.DataContracts.HotelMappingV3.DTORawMapHotel
    • ProviderRoomContent
    • Unica.DataContracts.HotelMappingV3.ProviderHotel
    • RoomMappingResponse2
    • HotelContent
    • Unica.Core.Contracts.Models.RawMapHotel
    • CuratedHotels
    • CuratedHotelsWithLocationContent
    • Unica.Core.Contracts.Models.HotelsAPI.HotelMappingV3.CuratedHotelWithLocationMapping
    • Unica.Core.Contracts.Models.DownloadStats
  1. Room Mapping

Preparing Your Files

Offline room mapping via file upload. Provide room information from your suppliers in CSV format and receive standardized room mappings in return.

Preparing Your Input File#

Download input template
Export a single CSV file containing one row for each supplier room, across every provider you want mapped together. Start from the template above rather than building the header row by hand.
Requirements:
RequirementValue
FormatCSV, comma (,) separated
Header rowRequired, and must be the first line of the file
Accepted content typestext/csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
For how much you may send in one file, including the file size ceiling, the row ceiling and
the number of files per upload, see the Service Limits page.
Column headers are matched exactly, and letter case matters. A header that is misspelled or cased differently is not reported as an error. The column is read as empty instead, and the file is processed as though you had sent no value at all. Check your header row against the template above before every upload.
The upload checks the content type, not the file extension. A workbook sent with a spreadsheet content type is accepted at upload and then fails later during processing, because the file is always read as CSV. Export to CSV before uploading.
Quote any value that contains a comma, such as a room description, so that it is not read as two columns.
Save the file as UTF-8 so that accented characters in room names survive. No encoding is enforced, so a file saved in another encoding is accepted and may produce mangled room names.
Leave a column empty when you have no value for it. Literal text such as NULL or null is treated as a value rather than as an empty cell.
Do not insert values in JSON or array format, and do not include HTML markup.
Do not include rate plan codes in the RoomCode column.
Provider values are compared exactly, and case sensitively, against the provider list your account is entitled to. A file containing a provider your account is not authorised for is refused, and the message lists the unrecognised names. Note that this refusal is returned in the response body with an HTTP 200 status and no status code, so check the body rather than the HTTP status. The message is also always prefixed with the mandatory fields wording, even when an unauthorised provider is the only fault.
The file based path and the API paths check provider against two different account scoped lists. A provider accepted in a file upload can still be rejected with status code 1011 on the real time or asynchronous path, and the reverse is also possible. Verify a provider on the path you intend to use rather than assuming one result carries over.
Mandatory values are checked across the whole file rather than row by row. If any row has an empty Provider, ProviderHotelId or RoomName, the entire file is rejected and the message names the column, not the row, so correct every occurrence before resubmitting.
100,000 rooms are processed per batch by default. Records beyond this limit are skipped automatically and the run still finishes with status Completed, so always compare the row count of your output file against your input file.
A Completed status does not by itself guarantee an output file. If the run succeeds but uploading the output fails, the status still reads Completed. Treat a missing output file as a run to raise with support rather than as an empty result.
For volumes above the 10 MB upload limit, use the SFTP based submission instead. Contact the Vervotech mappings team to have it configured.

Input File Columns#

ColumnRequiredDescription
VervotechHotelIdRecommendedThe Vervotech ID assigned to the property. If omitted, the system attempts a lookup using Provider and ProviderHotelId. If lookup fails, an ID is auto-generated in the format {Provider}_{ProviderHotelId}. Without this value, rooms from different providers for the same hotel cannot be grouped correctly.
ProviderYesSupplier name. Must match the master provider names.
ProviderHotelIdYesThe property ID assigned by the supplier.
RoomCodeNoThe room code from the supplier. Strongly recommended. Do not include rate plan codes.
RoomNameYesThe room name from the supplier.
DescriptionNoRoom description from the supplier.
BedNoBedding information from the supplier. Accepted, but it does not currently influence the mapping output.
ViewNoView information from the supplier. Accepted, but it does not currently influence the mapping output.
RefundabilityNoRefundability information from the supplier.
BoardBasisNoBoard basis information from the supplier.
These are the columns the input template carries, listed in the order the template uses, and they are the only columns the service reads. Anything else in your file is ignored.
At upload time only ProviderHotelId, Provider and RoomName are checked for a non empty value. The remaining columns are validated no further, so a problem in any other column surfaces only as reduced mapping quality in the output.

Output File Columns#

Download output template
Columns are written in the order shown below.
ColumnDescription
VervotechIdThe Vervotech ID of the hotel, repeated on every row for that hotel. This is not a per room identifier.
ProviderHotelIdThe property ID assigned by the supplier.
ProviderSupplier name from the master provider list.
GroupIdIdentifies the group within this run, in the format VervotechHotelId-index. Not stable across runs. See the note below.
RoomCodeRoom code from the supplier.
RoomNameRoom name from the supplier.
IsExclusiveIndicates that the group has a single provider. Reported per group, not per row. See the note below.
MappedStandardNameStandardized room name generated by Vervotech algorithms.
MappedMasterTitleRoom name from the official hotel website.
MasterRoomIdMaster ID from Vervotech master data. Empty if no match is found.
MappedCategoryRoom category extracted from the room name.
MappedLocationRoom location extracted from the room name. Examples: Highfloor, Oceanfront, Seaside.
MappedViewView category extracted from the room name.
MappedBedTypeBed type extracted from the room name.
BedInfoDisplay form of the bedding for the group. Example: 2 Queen.
MappedAttributesUnique room features extracted from the room name.
MappedOcccupancyBed occupancy category derived from the room name, such as Single, Double, Triple or NA. Note the spelling of this header, which carries three letter c characters.
BoardBasisStandardized board basis for the room rate.
Three of these columns are read wrongly often enough to be worth calling out.
GroupId is not a durable key. The part after the hotel ID is a counter assigned within a single run, in the order the groups happened to be produced. Re-running the same file can give the same room a different GroupId. Do not persist it as a join key; join on the supplier's own Provider and RoomCode instead.
IsExclusive can under report. It is derived from a provider set that is not always updated when groups are merged, so a group holding rates from more than one provider can still be marked exclusive. Treat it as a hint rather than a guarantee, and derive exclusivity yourself from the Provider column if it matters to you.
MappedOcccupancy is derived, not supplied. It is read out of the room name and expressed as a category, not copied from any occupancy value you sent. Unlike the occupancy fields on the input side, this one does take part in grouping.
Previous
Room Mapping Customizations
Next
How Supplier Content Is Standardised
Built with