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

Integration Guidelines and Go Live

A practical sequence for integrating room mapping, and a checklist to run before you go live.

1. Credentials and headers#

Every room mapping call carries these headers:
HeaderRequiredPurpose
accountIdYesYour Vervotech room mapping account.
tokenYesYour room mapping API token.
correlationIdYes on POST /api/2.0/mapping/roomsA unique value per request, which you generate. Quote it when raising support requests, because it is how a request is traced.
cultureNoResponse localisation. See the References page for the supported values.
correlationId is enforced only on POST /api/2.0/mapping/rooms, where omitting it returns HTTP 403. Send it on every call regardless, because it is what makes a request traceable when you raise it with support. A runId header is accepted as an alias, and when neither is sent a value is generated for you, which means a request you did not tag is far harder to find later.
This applies to the file based path too. POST /api/MappingTool/FileBasedMapping, GET /api/MappingTool/GetOfflineMapping and GET /api/MappingTool/DownloadFile all require accountId and token, and each one answers only for the account those headers name. Asking for another account's run history, or for a runId that belongs to another account, is refused with the same error as an invalid token.
Use demoAccount while you build. Contact the Vervotech mappings team for your own credentials.

2. Pull the reference data first#

Before you send any mapping request, retrieve and cache the master reference data, and build your feed against it rather than against hardcoded strings:
The provider names your account is entitled to, which are the only valid values for provider
The room attributes endpoint, which returns the recognised keys for attributes with any your account ignores already removed
The master room amenities

3. Build the request#

Send one hotel per request on the real time and asynchronous paths. This is a requirement, not something the API checks for you. If rooms for more than one hotel are sent together, the request is accepted and the additional hotel identifiers are discarded silently, so the rooms are mapped against a single resolved hotel and no error is returned.
A unique index on every room. This is how results are matched back to your input. Note that index is a number and defaults to 0 when omitted, so two rooms that both leave it out collide and the request is rejected with status code 1007.
Send code, description and attributes wherever you have them. See Preparing Your Request Data.

4. Choose the path#

See Choosing Your Integration Path. In short: real time for live flows, asynchronous for a single hotel with a large room set, file based for bulk catalogue work.

5. Handle responses correctly#

Check the response body, not only the HTTP status. A rejected request can still return HTTP 200, with success set to false and a statusCode carrying the reason. Branch on statusCode.
The HTTP status is not a reliable signal on its own, and it is not consistent across rejections. Most validation failures return HTTP 200 with the reason in the body, but some rejections return HTTP 400 carrying the same shape of body. Read statusCode in both cases.
Status code 1012 covers two different rejections: a payload that exceeds your per request limit, and a daily call quota that has been exhausted. Those need different responses from your integration, so read the accompanying message rather than the code alone. They also differ in HTTP status, the payload limit returning 200 and the quota returning 400, which is another reason not to branch on it.
Treat 1011 as a configuration problem rather than a transient one. It means a provider or content preference that your account is not entitled to.
Back off and retry on transient transport failures. Do not retry validation failures, which will fail identically every time.
Poll at a sensible interval. Neither the asynchronous path nor the file based path has a progress endpoint, so continuous polling adds load without returning an answer any sooner.

6. Pre go live checklist#

Every provider value is sourced from the provider names endpoint and matches exactly, including its casing, with no leading or trailing spaces.
Every attributes key is sourced from the master room attributes endpoint, and every value is one of Yes, Allowed, No or NotAllowed.
index is unique within each request, and results are matched back by it.
Request sizes are checked against your account payload limit before sending, with the asynchronous path used above it.
correlationId is generated per request and retained in your logs.
Retry and back off behaviour is implemented and has been tested against a forced failure.
Error handling branches on statusCode, including 1011 and 1012, and not on the HTTP status alone.
Room names are passed through unmodified.
If you use the file based path, your header row is identical to the input template linked in the File Based Room Mapping (Offline) section, and your process compares the output row count against the input row count.

7. Support#

Raise integration issues at the Vervotech support portal, or write to customersuccess@vervotech.com. Always quote the correlationId of an affected request, together with the account and provider names involved.
Previous
Choosing Your Integration Path
Next
Preparing Your Request Data
Built with