Young Estates Young Estates Holiday Rentals API
v1.3 · 30 Sep 2026
Young Estates · Holiday Rentals · Read-only REST API

Pull live holiday-rental data from Young Estates.

A simple, authenticated REST API for fetching our holiday-rental listings — names, locations, bedrooms, amenities, and imagery — as clean JSON. Send a GET request, get property data back, render it anywhere.

Audience Web developers Style REST · JSON Methods GET only Scope Holiday rentals
§ 01

Overview

The Young Estates Holiday Rentals API is read-only. You send an authenticated GET request and we return property data as JSON — there is nothing to write back, so it's safe to call from a build step, a cache warmer, or your server at request time.

There are three endpoints:

  • GET /wp-json/ye/v1/properties — a paginated, filterable list of rental properties.
  • GET /wp-json/ye/v1/properties/{id} — the full detail for one property.
  • GET /wp-json/ye/v1/properties/{id}/{field} — just one field of one property.
What is never returned

Owner, housekeeper, and property-manager details, financial fields, internal notes, and all pricing are excluded. The API only ever exposes public holiday-rental listing data.

Please cache

Listing data changes infrequently. Cache responses on your side (15–60 minutes is plenty) and use the updated_at field to decide when to refresh. Requests are rate-limited to 120 per minute per key.

§ 02

Authentication

Every request must include your API key in the X-API-Key header. Requests without a valid key receive a 401 Unauthorized.

Where to get your API key

Your API key is available in your agent dashboard at youngestates.com/agent. Sign in and open the API section to view or copy your key.

ItemValue
Base URLhttps://www.youngestates.com/wp-json/ye/v1
Auth headerX-API-Key
FormatJSON (Content-Type: application/json)
TransportHTTPS only
HTTP Request header
X-API-Key: your-api-key-from-the-agent-dashboard
Keep your key secret

Treat the API key like a password. Call the API from your server, store the key in an environment variable or server-side config, and never expose it in browser-visible code.

§ 03

Endpoints

Two routes cover the whole API: list many rentals, or fetch one in full.

List properties

GET /wp-json/ye/v1/properties

Returns a paginated array of rental-property summaries. Accepts filters and pagination via query parameters.

PHP List villas in St. James
<?php
$url = 'https://www.youngestates.com/wp-json/ye/v1/properties?city=St.+James&type=Villa&per_page=20';

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['X-API-Key: YOUR_API_KEY'],
]);
$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
foreach ($result['data'] as $property) {
    echo $property['name'] . ' — ' . $property['bedrooms'] . ' bedrooms\n';
}

Sample response (truncated to one item):

JSON 200 OK · list response
{
  "data": [
    {
      "id": 58517,
      "name": "Bluff House",
      "slug": "bluff-house-stay",
      "url": "https://www.youngestates.com/properties/bluff-house-stay/",
      "house_type": "Villa",
      "bedrooms": 8,
      "bathrooms": 8,
      "sleeps": 12,
      "pools": 1,
      "location": {
        "city": "St. James",
        "area": "Sandy Lane Estate",
        "latitude": 13.175458,
        "longitude": -59.636726
      },
      "thumbnail": "https://www.youngestates.com/wp-content/uploads/2024/05/DSC02355-768x512.jpg",
      "updated_at": "2026-05-27T12:14:18+00:00"
    }
  ],
  "meta": {
    "total": 91,
    "page": 1,
    "per_page": 20,
    "total_pages": 5
  }
}

Get a single property

GET /wp-json/ye/v1/properties/{id}

Returns the full record for one rental — description, all amenities, room-by-room detail, seasonal rates, reviews, staffing, gallery, and more. Replace {id} with the numeric property ID (or its slug).

Finding a property's ID

The ID for each property is listed under the Properties tab of your agent dashboard at youngestates.com/agent. You can also use the property's slug in place of the ID.

PHP Fetch one property in full
<?php
$id = 58517;
$ch = curl_init("https://www.youngestates.com/wp-json/ye/v1/properties/{$id}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['X-API-Key: YOUR_API_KEY'],
]);
$property = json_decode(curl_exec($ch), true);
curl_close($ch);

echo $property['name'];                 // Bluff House
echo $property['bedrooms'];             // 8
$rate = $property['pricing']['rates'][0]['periods'][0]['rate_per_night'];
JSON 200 OK · single property (arrays truncated)
{
  "id": 58517,
  "name": "Bluff House",
  "slug": "bluff-house-stay",
  "url": "https://www.youngestates.com/properties/bluff-house-stay/",
  "house_type": "Villa",
  "bedrooms": 8,
  "bathrooms": 8,
  "sleeps": 12,
  "pools": 1,
  "location": {
    "city": "St. James",
    "area": "Sandy Lane Estate",
    "latitude": 13.175458,
    "longitude": -59.636726,
    "address": "Sandy Lane Estate, St. James, Barbados"
  },
  "updated_at": "2026-05-27T12:14:18+00:00",
  "square_footage": null,
  "description": "<p>Bluff House is an exceptional beachfront villa...</p>",
  "amenities": ["Media Room", "Children Welcome", "Air Conditioned Bedrooms"],
  "house_rules": ["Children - All Welcome", "No Pets"],
  "taxonomies": {
    "area": ["Sandy Lane Estate"],
    "city": ["St. James"],
    "internal_amenities": ["Wi-Fi", "Media Room"],
    "external_amenities": ["Private Pool", "Direct Beach Access"],
    "bedroom_amenities": [],
    "bathroom_amenities": [],
    "house_rules": [],
    "fire_safety": [],
    "staff": ["Chef", "Housekeeper", "Butler"]
  },
  "rooms": null,
  "pool_size": null,
  "total_guests": 12,
  "security_deposit": 5000,
  "bookable": false,
  "check_in_out_time": "<p>Check-in 15:00 / Check-out 10:00</p>",
  "additional_information": "",
  "additional_house_rules": "",
  "concierge": "",
  "owner_review": "",
  "video": "<iframe ...></iframe>",
  "instagram": "",
  "pricing": {
    "currency": "USD",
    "sale_price": null,
    "long_term_monthly": null,
    "rates": [
      {
        "bedrooms": 8,
        "sleeps": 12,
        "periods": [
          {
            "from": "15 Apr 2026",
            "to": "14 Dec 2026",
            "minimum_stay": 5,
            "price_on_application": false,
            "rate_per_night": 3630
          }
        ]
      }
    ]
  },
  "special_offer": null,
  "stand_out_features": ["Beachfront", "Walk to Sandy Lane"],
  "rooms_detail": [
    {
      "name": "Master bedroom",
      "beds": "King Bed (US)",
      "view": "Sea view",
      "en_suite": true,
      "image": "https://www.youngestates.com/wp-content/uploads/2021/07/Bluff-House-022.jpg",
      "bedroom_amenities": ["Air Conditioning", "Ceiling Fan"],
      "bathroom_amenities": ["Walk-in Shower"]
    }
  ],
  "reviews": [
    { "name": "The Smith Family", "review": "<p>A wonderful stay.</p>" }
  ],
  "staff": {
    "summary": "<p>Fully staffed villa.</p>",
    "roles": [
      { "role": "Cook", "detail": "6 days per week", "season": "Winter & Festive", "meals_per_day": "2 consecutive Meals" }
    ]
  },
  "property_manager": {
    "name": "Maureen Philips",
    "bio": "<p>I have been with Young Estates since 2017...</p>",
    "image": "https://www.youngestates.com/wp-content/uploads/2026/05/DSC09170-768x947.jpg"
  },
  "availability_feeds": ["https://www.youngowners.com/wp-content/uploads/ics/Bluff-House/bookings.ics"],
  "info_sections": [
    { "title": "CONCIERGE SERVICES", "text": "<p>...</p>", "buttons": [ { "text": "MORE", "link": "https://www.youngestates.com/concierge/" } ] }
  ],
  "related": [
    { "id": 58463, "name": "Sea Breeze", "url": "https://www.youngestates.com/properties/sea-breeze/" }
  ],
  "images": [
    "https://www.youngestates.com/wp-content/uploads/2024/05/DSC02355-1024x683.jpg",
    "https://www.youngestates.com/wp-content/uploads/2024/05/DSC02360-1024x683.jpg"
  ]
}

Fetch a single field

GET /wp-json/ye/v1/properties/{id}/{field}

Need just one piece of data? Append any field name from the Property fields table to get only that field back, wrapped under its own key. Handy for lightweight widgets or refreshing a single value.

PHP Just the gallery images
<?php
$ch = curl_init('https://www.youngestates.com/wp-json/ye/v1/properties/58517/images');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['X-API-Key: YOUR_API_KEY'],
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

foreach ($result['images'] as $src) {
    echo '<img src="' . htmlspecialchars($src) . '">';
}
JSON 200 OK · single field
// GET /properties/58517/bedrooms
{ "bedrooms": 8 }

// GET /properties/58517/rooms_detail
{ "rooms_detail": [ { "name": "Master bedroom", ... } ] }
Available field endpoints

Any top-level field works: name, url, house_type, bedrooms, bathrooms, sleeps, pools, location, description, amenities, house_rules, rooms, pool_size, total_guests, security_deposit, bookable, check_in_out_time, additional_information, additional_house_rules, concierge, owner_review, video, instagram, pricing, special_offer, stand_out_features, rooms_detail, reviews, staff, property_manager, availability_feeds, info_sections, related, taxonomies, images, updated_at. An unknown field returns 404.

Inside WordPress

If your site runs WordPress, wp_remote_get() is the simplest way to call the API and decode the JSON:

PHP Server-side fetch (WordPress)
<?php
$response = wp_remote_get(
    'https://www.youngestates.com/wp-json/ye/v1/properties?city=St.+James',
    [ 'headers' => [ 'X-API-Key' => getenv('YE_API_KEY') ] ]
);

if ( is_wp_error( $response ) ) {
    error_log( 'YE API error: ' . $response->get_error_message() );
    return;
}

$body = json_decode( wp_remote_retrieve_body( $response ), true );
foreach ( $body['data'] as $property ) {
    echo esc_html( $property['name'] );
}
§ 04

Query parameters

All parameters are optional and apply to the GET /properties list endpoint. Combine them freely — they're AND-ed together.

ParamTypeDescription
citystringFilter by parish / city term, e.g. St. James.
areastringFilter by neighbourhood / area term, e.g. Sandy Lane Estate.
typestringHouse type, e.g. Villa, Apartment.
bedroomsintegerExact number of bedrooms.
bedrooms_minintegerMinimum number of bedrooms.
guestsintegerMinimum sleeps capacity.
searchstringFree-text search on name & description.
sortstringname or newest. Default newest.
pageinteger1-based page number. Default 1.
per_pageintegerItems per page, 1–100. Default 20.
Pagination

The meta block on every list response tells you total, page, per_page, and total_pages. Loop page from 1 to total_pages to walk the whole catalogue.

§ 05

Property fields

Fields returned for each property. The list endpoint returns a summary; the single endpoint adds the heavier fields (address, amenities, description, images).

FieldTypeIn list?Notes
idintegerYesUnique property ID. Use it for the single endpoint.
namestringYesProperty name, e.g. "Bluff House".
slugstringYesURL slug. Usable in place of the ID.
urlstringYesCanonical page on youngestates.com.
house_typestringYese.g. Villa.
bedroomsintegerYes
bathroomsnumberYesMay be a half value, e.g. 5.5.
sleepsintegerYesMax guests.
poolsintegerYesNumber of pools.
locationobjectYescity, area, latitude, longitude; address on single only.
thumbnailstringYesSingle representative image (list only).
updated_atstringYesISO-8601 UTC timestamp of last change. Use for cache invalidation.
square_footageinteger|nullNoNull when not recorded.
descriptionstring (HTML)NoLong description.
amenitiesstring[]NoInternal & external amenity names.
house_rulesstring[]NoHouse-rule terms.
taxonomiesobjectNoEvery listing taxonomy as term-name arrays: area, city, internal_amenities, external_amenities, bedroom_amenities, bathroom_amenities, house_rules, fire_safety, staff.
roomsinteger|nullNoRoom count, when recorded.
pool_sizestring|nullNoFree-text pool size.
total_guestsinteger|nullNoMax guests.
security_depositinteger|nullNoRefundable deposit (USD).
bookablebooleanNoWhether instant booking is enabled.
check_in_out_timestring (HTML)NoCheck-in / check-out times.
additional_informationstring (HTML)NoFree-text notes.
additional_house_rulesstring (HTML)NoExtra house rules.
conciergestring (HTML)NoConcierge blurb.
owner_reviewstring (HTML)NoOwner's note.
videostring (HTML)NoVideo embed markup.
instagramstring (HTML)NoInstagram embed markup.
pricingobjectNocurrency, sale_price, long_term_monthly, and a rates array of seasonal periods (from, to, minimum_stay, price_on_application, rate_per_night).
special_offerobject|nullNotitle + body, or null.
stand_out_featuresstring[]NoHeadline features.
rooms_detailobject[]NoPer-room: name, beds, view, en_suite, image, bedroom_amenities, bathroom_amenities.
reviewsobject[]NoGuest reviews: name + review.
staffobject|nullNosummary + roles (role, detail, season, meals_per_day).
property_managerobject|nullNoname, bio, image. Never contact details.
availability_feedsstring[]NoiCal (.ics) availability feed URLs.
info_sectionsobject[]NoAccordion: title, text, buttons.
relatedobject[]NoRelated rentals: id, name, url.
imagesstring[]NoFull gallery.
HTML fields

Fields marked (HTML) contain the same rich markup shown on the website (paragraphs, embeds, etc.). Render or sanitise them as appropriate for your site.

§ 06

Errors

Errors return a non-2xx status and a JSON body with a code and a human-readable message.

JSON 401 Unauthorized
{
  "code": "ye_invalid_key",
  "message": "Missing or invalid API key.",
  "data": { "status": 401 }
}
JSON 410 Gone — property withdrawn
{
  "code": "ye_property_withdrawn",
  "message": "Property #58481 (Magnolia) is no longer available through the Young Estates API. Please remove it from your system.",
  "data": { "status": 410, "property_id": 58481, "action": "remove" }
}
StatusMeaningWhat to do
200OKRequest succeeded.
401UnauthorizedMissing or invalid X-API-Key. Check the header.
404Not foundNo property exists with that ID/slug.
410GoneThe property existed but is no longer available through the API. Delete it from your system — it will not come back under this ID. The body includes data.property_id and data.action: "remove".
429Too many requestsRate limit hit (120/min) — back off and retry after the window.
500Server errorTransient on our side. Retry with backoff; contact us if it persists.
§ 07

Support

  • Your API key and each property's ID are in your agent dashboard at youngestates.com/agent.
  • Questions or a key rotation — email stay@youngestates.com from your registered partner address.
  • For bug reports, include the request URL (minus your key), the status code, and the response body.