Skip to content
Hostelworld

Hostelworld rooms

Hostelworld: every dorm bed and private room with rate plans.

POST/v1/ota/hostelworld
8 credits

Currency 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

POSThttps://api.scrapercompany.com/v1/ota/hostelworld

Authenticate 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 30

    Length of stay. Ignored when check_out is supplied.

  • guestsintegerdefault 1min 1, max 8

    Number 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).

200 response
{
  "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 fields
    • search_parameters.enginestringrequired

      One ofhostelworld_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 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 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 fields
      • property.rooms[].room_idintegerrequired
      • property.rooms[].namestringrequired
      • property.rooms[].room_typestringrequired

        One ofdormprivate

      • 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 fields
    • meta.sourcestringrequired

      One ofhostelworld

    • 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.

StatusMeaningRetry?
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 is a list of problems for schema errors, or a string for semantic checks performed by the endpoint.

{"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

  1. Export your key: export SCRAPERCOMPANY_API_KEY=sk_... (no key yet? request access).
  2. Copy the cURL example above and run it in a terminal.
  3. Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.

Credits

8 credits per successful call. Failed, blocked and empty results are free. Credit metering is in beta and does not block requests yet.