Hostelworld rooms
Hostelworld: every dorm bed and private room with rate plans.
/v1/ota/hostelworldCurrency is NOT selectable — Hostelworld returns the property's native currency (typically GBP for UK hostels). Per-bed pricing for dorms, per-room pricing for privates.
Request
https://api.scrapercompany.com/v1/ota/hostelworldAuthenticate with your API key in the x-api-key header (see Authentication).
Body
JSON object. Unknown fields are rejected with 422.
- property_idstringrequiredmin length 1
Numeric property id from Hostelworld URL, e.g.
hostelworld.com/pwa/hosteldetails.php/88047/... - check_instring (date)required
First night of the stay,
YYYY-MM-DD. - check_outstring (date) | null
Departure date. An alternative to
nights— if both are given, this wins. - nightsintegerdefault
1min 1, max 30Length of stay. Ignored when
check_outis supplied. - guestsintegerdefault
1min 1, max 8Number of guests. For dorms, this is the number of beds needed. For private rooms, this is the occupancy.
Example request
curl -X POST "https://api.scrapercompany.com/v1/ota/hostelworld" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"property_id": "88047",
"check_in": "2026-11-30",
"nights": 1,
"guests": 1
}'Response
200 — Hostelworld rooms and rate plans. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).
{
"search_parameters": {
"engine": "hostelworld_property",
"property_id": "88047",
"check_in_date": "2029-03-03",
"check_out_date": "2029-03-04",
"guests": 1
},
"property": {
"property_id": "88047",
"price_per_night": 52.9,
"currency": "GBP",
"sold_out": false,
"deposit_percentage": 15,
"free_cancellation_available": true,
"provenance": {
"schema_version": 1,
"observation_id": "rateobs_0123456789abcdef0123456789abcdef",
"collection_id": "ratecol_0123456789abcdef0123456789abcdef",
"observed_at": "2026-08-07T01:23:45.678Z",
"source": "hostelworld",
"source_kind": "ota_rate_plan",
"collector": "scrapingme.ota.hostelworld",
"source_property_id": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ",
"requested_market": "US",
"requested_currency": "USD",
"returned_currency": "USD",
"egress_mode": "direct",
"price_basis": "room_base_before_taxes_and_fees",
"derivation": "normalized_upstream"
},
"rooms": [
{
"room_id": 383266,
"name": "8 Bed Mixed Dorm Ensuite",
"room_type": "dorm",
"basic_type": "Mixed Dorm",
"capacity": 8,
"ensuite": true,
"beds_available": 42,
"rate_plans": [
{
"rate_plan_id": 151291,
"rate_plan_type": "STANDARD",
"payment_procedure": "depositPayable",
"payment_label": "Deposit only",
"is_default": true,
"price": 52.9,
"original_price": 66.13,
"currency": "GBP",
"min_nights": 1,
"restrictions": [],
"promotions": {
"discount": "20.00"
},
"provenance": {
"schema_version": 1,
"observation_id": "rateobs_0123456789abcdef0123456789abcdef",
"collection_id": "ratecol_0123456789abcdef0123456789abcdef",
"observed_at": "2026-08-07T01:23:45.678Z",
"source": "hostelworld",
"source_kind": "ota_rate_plan",
"collector": "scrapingme.ota.hostelworld",
"source_property_id": "ChUIoben2Mv6-CYaCi9tLzA3czVwbjQQAQ",
"requested_market": "US",
"requested_currency": "USD",
"returned_currency": "USD",
"egress_mode": "direct",
"price_basis": "room_base_before_taxes_and_fees",
"derivation": "normalized_upstream"
}
}
]
}
]
},
"meta": {
"source": "hostelworld",
"nights": 1,
"wire_bytes": 49946,
"elapsed_s": 0.284,
"dorms_count": 8,
"privates_count": 4,
"comparable_across_markets": false
}
}Response fields
Fields marked required are always present; others appear when they apply.
- search_parametersobjectrequired
Show 5 child fieldsHide child fields
- search_parameters.enginestringrequired
One of
hostelworld_property - search_parameters.property_idstringrequired
- search_parameters.check_in_datestring (date)required
- search_parameters.check_out_datestring (date)required
- search_parameters.guestsintegerrequired
- propertyobjectrequired
Show 9 child fieldsHide child fields
- property.property_idstringrequired
- property.price_per_nightnumber | nullrequired
- property.currencystringrequired
The property's native currency.
- property.sold_outbooleanrequired
- property.deposit_percentagenumber | nullrequired
- property.free_cancellation_availablebooleanrequired
- property.vatnumberrequired
- property.provenanceobject | nullrequired
Provenance of the cheapest priced row; null when nothing priced.
Show 15 child fieldsHide child fields
- property.provenance.schema_versionintegerrequired
Provenance schema version (currently 1).
- property.provenance.observation_idstringrequired
Deterministic id of this price observation (
rateobs_...). - property.provenance.collection_idstringrequired
Id shared by every price from one upstream fetch (
ratecol_...). - property.provenance.observed_atstringrequired
UTC observation time, ISO-8601.
- property.provenance.sourcestringrequired
Upstream source, e.g.
google_hotels_calendar. - property.provenance.source_kindstringrequired
Kind of source, e.g.
calendar,offer,ota_calendar,official. - property.provenance.collectorstringrequired
Identifier of the collector that produced the price.
- property.provenance.source_property_idstringrequired
Property identifier at the source.
- property.provenance.requested_marketstring | nullrequired
- property.provenance.requested_currencystring | nullrequired
- property.provenance.returned_currencystring | nullrequired
- property.provenance.egress_modestringrequired
How the request reached the source, e.g.
direct. - property.provenance.price_basisstringrequired
What the price represents, e.g.
room_base_before_taxes_and_fees. - property.provenance.derivationstringrequired
How the figure was derived, e.g.
normalized_upstream. - property.provenance.upstream_rate_idstring | nullrequired
Source-native rate/room id when available.
- property.roomsarray of objectrequired
Show 12 child fieldsHide child fields
- property.rooms[].room_idintegerrequired
- property.rooms[].namestringrequired
- property.rooms[].room_typestringrequired
One of
dormprivate - property.rooms[].basic_typestringrequired
- property.rooms[].capacityintegerrequired
- property.rooms[].ensuitebooleanrequired
- property.rooms[].descriptionstringrequired
- property.rooms[].label_descriptionstringrequired
- property.rooms[].beds_availableinteger | nullrequired
- property.rooms[].rooms_availableinteger | nullrequired
- property.rooms[].availablebooleanrequired
- property.rooms[].rate_plansarray of objectrequired
- metaobjectrequired
Show 11 child fieldsHide child fields
- meta.sourcestringrequired
One of
hostelworld - meta.collection_idstringrequired
- meta.observed_atstringrequired
- meta.nightsintegerrequired
- meta.wire_bytesintegerrequired
- meta.elapsed_snumberrequired
- meta.dorms_countintegerrequired
- meta.privates_countintegerrequired
- meta.total_rate_plansintegerrequired
- meta.comparable_across_marketsbooleanrequired
Always false.
- meta.notesstringrequired
Errors
Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.
| Status | Meaning | Retry? |
|---|---|---|
401Unauthorized | Missing or invalid API key. {"detail":"missing or invalid API key"} | No, fix the request |
402Payment Required | Not enough credits for this request. Only returned once credit enforcement is switched on; during the beta metering runs in shadow mode and never blocks. {"detail":"insufficient credits: this request costs 5, 0 available. Credits renew 2026-11-01."} | No, fix the request |
422Unprocessable Content | Request validation failed. {"detail":[{"loc":["body","name"],"msg":"Field required","type":"missing"}]} | No, fix the request |
429Too Many Requests | Too many requests: the key's requests-per-minute limit was exceeded, or (once credit enforcement is on) the plan's concurrent-request limit. No rate-limit or Retry-After headers are sent; back off and retry. {"detail":"rate limit 60/min exceeded"} | Yes, with backoff |
502Bad Gateway | The upstream source failed, blocked the request or returned an unusable answer. Safe to retry later; failed requests are not charged. {"detail":"RuntimeError"} | Yes, with backoff |
Try it
- Export your key:
export SCRAPERCOMPANY_API_KEY=sk_...(no key yet? request access). - Copy the cURL example above and run it in a terminal.
- Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.