Recipes/Register the four entity types on your account
Code Account12 min

Register the four entity types on your account

The endpoints don't take free text: they take your identifiers. Before you can ask Veetal anything you have to tell it what to watch — a hotel, a destination, a filtered market, a route. Four wizards, one of each, and the traps each one hides.

Register the four entity types on your account

What you'll build

One accommodation with its OTA profiles resolved, one location, one location search with the filters that define your competitive set, and one flight route — plus the account endpoints that do the same thing from code.

How it works

  1. 01What an entity is, and why there are four
  2. 02Accommodation — the hotel
  3. 03Location — the destination
  4. 04Location search — the destination, filtered
  5. 05Flight — the route
  6. 06The same thing over the API
  7. 07What happens next

Step by step

By the end you will have one of each of the four entity types on your account — an accommodation, a location, a location search and a flight — which is what every Feed and Real Time endpoint asks you to point at.

What you need: an account with the Account API active. Nothing else.

What it costs: nothing. Creating entities is free. Resolving them against Booking is free too — you only pay when you ask for data about them.

What an entity is, and why there are four

An entity is a thing you have told Veetal to watch. The endpoints don't take free text: they take your identifiers. Which type you need depends on the question:

TypeAnswersUsed by
Accommodationone hotel: its rates, availability, reputation, reviews, paritymost Real Time endpoints and the accommodation Feed datasets
Locationa destination as a whole: what is happening therethe events and holidays feeds
Location searcha destination filtered into a competitive set: who is on sale and at what pricethe Booking location search feed and market demand
Flighta route: what it costs to fly inthe flight rates feed and real-time flight rates

All four live under My organization, each on its own tab, and all four can also be created from the + button in the header. If you open the wizard from an API page instead, it adds a final step to put the new entity straight onto that API's schedules.

1. Accommodation — the hotel

On the Accommodations tab, Add accommodations. The wizard opens on three routes:

The three ways to add a hotel

Search Booking accommodation is the usual one. I have accommodation Booking URL is for when the search is ambiguous and you already have the listing open. Import accommodations from .csv/.xls file is the bulk route.

Search by name. The results carry the hotel's photo and city, and the ones already on your account are greyed out and marked It's yours — which saves you the duplicate:

Search results, with the ones you already have marked

If nothing matches, use fewer words: the search matches Booking approximately, not your exact string.

Pick one and Continue. Veetal now resolves the listing for real and shows you what it found — stars, guest score, review count, address — plus Profiles Found: which OTAs this hotel actually has a listing on.

The resolved hotel and the OTA profiles found

In this example Booking, Tripadvisor and Google were found; Expedia and Hotels.com were not. That matters later: an OTA with no profile has nothing to import, and the reputation feed will only return the ones with a green tick. Repeat search profiles runs the detection again if you think it missed one, and View Profile opens the listing it matched so you can check it is the right property.

Add accommodation, and the row appears in the list. The SETUP column is that same profile map, one badge per OTA:

The list, with the SETUP column showing linked OTAs

One thing worth knowing: the slug Veetal assigns comes from the Booking URL, not from the display name. "Ohla Barcelona" became ohla. The slug is what every endpoint takes, so copy it from the row rather than guessing it.

2. Location — the destination

The Locations tab, Add locations. The dialog says what it is for: "You will use them to search events in the destination".

Search the destination and you get why this step exists at all:

Four Barcelonas in four countries

Four Barcelonas — Spain, Venezuela, Colombia, the Philippines — each with its own coordinates and a Show Map to check. Pick the wrong one and every event you read afterwards is for the wrong city.

⚠️ The name has to be the real destination name. Renaming it to something of your own returns error 731: the pair (destination id, name) is validated against Booking.

Add location and the row lands with its type — Tier 1 here — and its coordinates:

The created location

3. Location search — the destination, filtered

The Location searches tab, Add location searches. The finder is richer than the location one: as well as the city it offers districts, the airport, the province and landmarks like the Fira, because a "market" can be any of those.

Step two is the point of this entity — the filters:

The search parameters

Country, currency and language (they change the prices Booking shows), board, stars, property type, and further down distance from centre, minimum score, free cancellation, pet friendly, nights, adults, children, babies and rooms.

These filters are the entity. They define which hotels the search covers — your competitive universe — and therefore how much every run of the feed costs. The example here is 4 and 5 star hotels in Barcelona, one night, two adults. Add location search, and the row shows the filters back as chips:

The created location search with its filters

4. Flight — the route

The Flights tab, Add flights. This is the most self-contained of the four: airports are resolved locally, so it works even when the OTAs don't.

Type a city and you get its airports with their IATA codes — London alone offers seven:

The airport autocomplete

Then trip type, dates, passengers, and two fields that are required and easy to miss: LANGUAGE and COUNTRY. They are the point of sale — the market whose prices you want — not the route. Leave one empty and the field turns red with This field is required and Add flight stays disabled.

The completed flight form

A Round trip needs a date range; One way takes a single date.

The same thing over the API

Every one of the four has a matching account endpoint, so you can do all of this from code once you know the shape:

POST /v2/account/accommodation · POST /v2/account/location · POST /v2/account/location-search · POST /v2/account/flight

And GET on the same paths lists what you have, which is how you get the slugs and ids the data endpoints need.

What happens next

Entities on their own don't fetch anything. From here the path forks: a Real Time endpoint will answer about them immediately, one request at a time; a Feed dataset needs an import to have run first, which you set up as a schedule on that API's page. Each row also has activate, deactivate and delete, and the checkboxes give you the same three in bulk — a deactivated entity stops being imported without losing its history.

Questions

Does creating an entity cost credits?

No. Creating, editing, activating and deleting entities are all free, and so is the resolution against Booking that happens while you create them. You start paying when you ask for data: a real-time request, or a feed import running over the entity.

The hotel I want doesn't come up in the search

Use fewer words. The search matches Booking approximately, and long official names ("G.L Monumento", "by Meliá") tend to break the match. If it still won't come up, open the listing on Booking and use the second route, "I have accommodation Booking URL", which takes the URL directly.

Two OTAs came back as Profile Not Found. Is that a problem?

It only means the hotel has no listing there, or that the automatic match wasn't confident enough. Nothing breaks: those OTAs simply have nothing to import, and the reputation and rate feeds will return the ones that were found. Use "Repeat search profiles" to try again, and "View Profile" to check that the ones it did find are the right property.

What is the difference between a location and a location search?

A location is a destination as a whole and feeds the events and holidays datasets. A location search is a destination plus filters — stars, property type, board, occupancy — and feeds the rate and market datasets. If your question is "what is happening in this city", it's a location. If it's "who is on sale here and at what price", it's a location search.

Why does my flight ask for a language and a country?

Because a fare isn't a single number: it depends on where it is being sold. Language and country are the point of sale, and they change the prices you get back. They are required for exactly that reason, and they are about the market you sell in, not about the route.

Can I create all of this over the API instead?

Yes. Every type has POST, PUT, DELETE and GET under /v2/account. The dashboard is faster for the first few and for anything where you want to see what Booking resolved before committing; the API is what you want for bulk and for keeping your entities in sync with your own system.

Build your own

Start free with 100 API credits. No credit card, no sales call.

Whatsapp