Young Estates Young Estates Holiday Rentals API
v1.0
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.

Holiday rentals only

This API returns only properties available for holiday rental. Sale listings, hidden listings, and any non-rental property are never returned by either endpoint.

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
      },
      "categories": ["Beach and Marina", "Sandy Lane Villas"],
      "thumbnail": "https://a14b7a9a.delivery.rocketcdn.me/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"
  },
  "categories": ["Beach and Marina", "Sandy Lane Villas"],
  "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"],
    "category": ["Beach and Marina", "Sandy Lane Villas"],
    "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://a14b7a9a.delivery.rocketcdn.me/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://a14b7a9a.delivery.rocketcdn.me/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://a14b7a9a.delivery.rocketcdn.me/wp-content/uploads/2024/05/DSC02355-1024x683.jpg",
    "https://a14b7a9a.delivery.rocketcdn.me/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, categories, 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.
categorystringFilter by property category, e.g. Golf and Resort.
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.
categoriesstring[]YesCategory taxonomy terms.
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, category, 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 }
}
StatusMeaningWhat to do
200OKRequest succeeded.
401UnauthorizedMissing or invalid X-API-Key. Check the header.
404Not foundNo rental with that ID/slug, or it isn't a published holiday rental.
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.