Every numeric vocabulary this Actor maps to a name, how complete each map is, and how we know.
Describes build 1.0.173 of rl1987/booking-api-scraper, deployed 2026-10-29. The column set last changed 2026-10-29. Earlier builds can return a different one.
Every numeric vocabulary this Actor maps to a name, how complete each map is, and how we know.
Booking publishes none of these. Three of the tables below were lifted whole from the Booking Android app and are closed - a gap in them means no such id. The rest were learned by observing live payloads, and there a missing id means we have not seen it, not no such type exists. Each table says which it is. An unmapped id is always passed through with its raw number rather than dropped, so no row loses information to a gap.
Where it appears: accommodationTypeId on a property row, and the accommodationTypes input. Booking’s own search filters use the same ids as property_type::<id>.
Coverage: 24 ids, from 201 to 228. 4 ids inside that range are unmapped, and ids outside it may exist too, so treat the table as partial.
Provenance: Learned from live payloads: every name is the accommodationTypeName Booking itself returned beside the id, across 15 destinations. The vocabulary does not stop at 228 - the app’s Hotel$HotelType enum references 229, 230 and 232, which we have never been served. That enum is a coarse seven-way roll-up, so it cannot supply a name for them; the real id -> name list is served by Booking’s filter API, localised.
| ID | Name | Also accepted as |
|---|---|---|
| 201 | Apartments | apartment, flat, flats |
| 203 | Hostels | hostel |
| 204 | Hotels | hotel |
| 205 | Motels | motel |
| 206 | Resorts | resort |
| 208 | Bed and Breakfasts | b&b, b&bs, bed & breakfast, bed & breakfasts, bed and breakfast, bnb |
| 209 | Ryokans | ryokan |
| 210 | Farm Stays | farm, farm stay, farmstay, farmstays |
| 212 | Resort Villages | holiday park, holiday parks, resort village |
| 213 | Villas | villa |
| 214 | Campgrounds | campground, camping, campsite, campsites |
| 215 | Boats | boat |
| 216 | Guesthouses | guest house, guest houses, guesthouse |
| 218 | Inns | inn |
| 219 | Condo Hotels | apart hotel, apart hotels, apart-hotel, apart-hotels, aparthotel, aparthotels, condo hotel |
| 220 | Vacation Homes | holiday home, holiday homes, holiday rental, holiday rentals, vacation home, vacation rental, vacation rentals |
| 221 | Lodges | lodge |
| 222 | Homestays | homestay |
| 223 | Country Houses | country house |
| 224 | Luxury tents | glamping, luxury tent |
| 225 | Capsule Hotels | capsule hotel |
| 226 | Love Hotels | love hotel |
| 227 | Riads | riad |
| 228 | Chalets | chalet |
Where it appears: products[].roomTypeId. Resolved to roomTypeCode on the row.
Coverage: 20 ids, from 1 to 33 - the complete vocabulary. The 13 ids missing inside that range are not defined upstream either.
Provenance: The complete BlockType enum, lifted from the APK and re-read independently by a second job. The 13 gaps are ids the enum itself does not define. UNKNOWN (20) is the app’s own fallback rather than a room category.
| ID | Name |
|---|---|
| 1 | APARTMENT |
| 4 | QUADRUPLE |
| 5 | SUITE |
| 7 | TRIPLE |
| 8 | TWIN |
| 9 | DOUBLE |
| 10 | SINGLE |
| 12 | STUDIO |
| 13 | FAMILY |
| 20 | UNKNOWN |
| 23 | DOUBLE_FOR_SINGLE_USE |
| 24 | TWIN_DOUBLE |
| 25 | DORMITORY_ROOM |
| 26 | BED_IN_DORMITORY |
| 27 | BUNGALOW |
| 28 | CHALET |
| 29 | HOLIDAY_HOME |
| 31 | VILLA |
| 32 | MOBILE_HOME |
| 33 | TENT |
Where it appears: rooms[].beds[].typeId, beside the localised beds[].name.
Coverage: 8 ids, from 1 to 8 - the complete vocabulary. No gaps.
Provenance: Closed at 8: the app’s icon dispatch is a jump table over exactly 1-8, so it knows of no ninth id. The codes here are ours; the app carries no label per id, only an icon, so the human string is always Booking’s own name - which is sometimes absent, making the id the only reliable key.
| ID | Name |
|---|---|
| 1 | twin |
| 2 | double |
| 3 | king |
| 4 | bunk_bed |
| 5 | sofa_bed |
| 6 | queen |
| 7 | futon |
| 8 | double_bunk_bed |
Where it appears: price.extra_charges.details[].chargeTypeId. The search path sends the id with no localised name, so an unmapped id is passed through as TYPE_<n> with the raw number kept - identifiable, just not named.
Coverage: 7 ids, from 21 to 148. 121 ids inside that range are unmapped, and ids outside it may exist too, so treat the table as partial.
Provenance: The most incomplete table here, and it cannot be completed from the app. The numeric id is a server-side enum the app never names: a grep across all 24 dex files for these constants returns nothing, and the app’s own charge model is string-based. Each of these seven was earned by matching a search-path amount to the cent against a named rate-level line, and that is the only way to earn another. On the rate level you do not need this table - Booking sends the name.
| ID | Name |
|---|---|
| 21 | VAT |
| 22 | CITYTAX |
| 23 | TAX |
| 141 | MUNICIPALITYFEE |
| 142 | TOURISMFEE |
| 146 | HERITAGECHARGE |
| 148 | GOVERNMENTTAX |
Where it appears: acceptedPaymentMethods[].id - what the property takes at the property, which is not the same question as what you can pay with through Booking. The row already carries Booking’s own name and nameEn, so this table is for joining, not for labelling: the name is localised and moves with the request locale, the id does not.
Coverage: 72 ids, from 1 to 76 - the complete vocabulary. The 4 ids missing inside that range are not defined upstream either.
Provenance: The app’s complete credit_card_types_keys resource array, English default; 6, 20, 24 and 33 are genuinely absent. Booking’s field name is not a description of its contents - 18 Cash only, 45 Cash, 46 PayPal, 57 M-Pesa and 62 iDeal are not cards.
| ID | Name |
|---|---|
| 1 | American Express |
| 2 | Visa |
| 3 | Mastercard |
| 4 | Carte Bleue |
| 5 | Diners Club |
| 7 | JCB |
| 8 | ATM card |
| 9 | Red 6000 |
| 10 | Maestro |
| 11 | Discover |
| 12 | Bancontact |
| 13 | Solo |
| 14 | Switch |
| 15 | Carte Blanche |
| 16 | NICOS |
| 17 | UC |
| 18 | Cash only |
| 19 | Bankcard |
| 21 | CartaSi |
| 22 | Argencard |
| 23 | Cabal |
| 25 | Red Compra |
| 26 | Other |
| 27 | Greatwall |
| 28 | Peony |
| 29 | Dragon |
| 30 | Pacific |
| 31 | Jin |
| 32 | Eftpos |
| 34 | Hipercard |
| 35 | UnionPay debit card |
| 36 | UnionPay credit card |
| 37 | EC-Card |
| 38 | BC-Card |
| 39 | MasterCard (virtual credit card) |
| 40 | Mastercard Google Wallet |
| 41 | KH Széchényi Pihenõkártya |
| 42 | MKB Széchényi Pihenõkártya |
| 43 | OTP Széchényi Pihenõkártya |
| 44 | UnionPay credit card |
| 45 | Cash |
| 46 | PayPal |
| 47 | Cheque (domestic only) |
| 48 | ANCV chèques-vacances |
| 49 | PayPlug |
| 50 | Euro 6000 |
| 51 | Postepay |
| 52 | Sistema 5B |
| 53 | PagSeguro |
| 54 | Elo Creditcard |
| 55 | Bcash |
| 56 | Interac e-Transfer |
| 57 | M-Pesa |
| 58 | Knet |
| 59 | Western Union |
| 60 | Apple Pay |
| 61 | Square Cash |
| 62 | iDeal |
| 63 | BankAxept |
| 64 | Reka-Check |
| 65 | Paysera.com |
| 66 | BankLink |
| 67 | Alipay |
| 68 | Tenpay |
| 69 | Lastschrift |
| 70 | Sadad |
| 71 | Qiwi |
| 72 | AirPlus |
| 73 | Virtual Credit Card |
| 74 | Visa (virtual credit card) |
| 75 | American Express (virtual credit card) |
| 76 | MIR |