Skip to content
Log in
Property & Catalog

Property & Catalog

Use the catalog endpoints to read what you can sell: the property itself, its room types, live availability, the rate plans a guest may book, and add-on services. They are all read-only and need the availability:read scope.


Get the property

GET /property

Scope: availability:read

Returns the details of the property the key is bound to.

curl "$VRDN_BASE/property" -H "Authorization: Bearer $VRDN_KEY"
{
  "id": "4e1b7c2a-9d3f-4a6e-8b5c-0f2d7a9e3c18",
  "slug": "sunrise-bay",
  "name": "Sunrise Bay Resort",
  "currency": "USD",
  "timezone": "Pacific/Fiji",
  "child_max_age": 12,
  "infant_max_age": 2
}
FieldTypeNotes
idstringThe property's id (a UUID).
slugstringURL slug.
namestringDisplay name.
currencystringThe property's base currency (ISO 4217).
timezonestringIANA time zone, used for "today" in sale and stay windows.
child_max_ageintegerGuests at or under this age price as children.
infant_max_ageintegerGuests at or under this age price as infants.

List room types

GET /room-types

Scope: availability:read

Returns every room type with its merchandising data: description, occupancy, amenities, and photos (primary photo first).

curl "$VRDN_BASE/room-types" -H "Authorization: Bearer $VRDN_KEY"
{
  "data": [
    {
      "id": "9b2f6c3e-8d1a-4f5b-a7c9-4e0d2b8f1a63",
      "name": "Deluxe Ocean Villa",
      "description": "A private villa over the lagoon.",
      "max_occupancy": 3,
      "currency": "USD",
      "amenities": ["Ocean view", "Private deck"],
      "photos": ["https://veridien.app/files/example/deluxe-1.jpg"]
    }
  ]
}

Search availability

GET /availability

Scope: availability:read

Returns, per room type, the smallest number of rooms free on any night of the range. Only room types whose max_occupancy fits the party are returned.

Query parameterRequiredNotes
check_inyesYYYY-MM-DD.
check_outyesYYYY-MM-DD, after check_in. Stays are capped at 30 nights.
adultsyesInteger, at least 1.
childrennoInteger, at least 0. Default 0. The party size is adults + children.
child_agesnoComma-separated child ages (for example 5,7). Accepted for parity with /rates; it does not change the party size here.
curl "$VRDN_BASE/availability?check_in=2026-08-01&check_out=2026-08-04&adults=2" \
  -H "Authorization: Bearer $VRDN_KEY"
{
  "check_in": "2026-08-01",
  "check_out": "2026-08-04",
  "data": [
    {
      "room_type_id": "9b2f6c3e-8d1a-4f5b-a7c9-4e0d2b8f1a63",
      "name": "Deluxe Ocean Villa",
      "description": "A private villa over the lagoon.",
      "max_occupancy": 3,
      "available": 4,
      "currency": "USD",
      "amenities": ["Ocean view", "Private deck"],
      "photos": ["https://veridien.app/files/example/deluxe-1.jpg"]
    }
  ]
}

available is the number of rooms you can still book. 0 means sold out on at least one night in the range.


Search rates

GET /rates

Scope: availability:read

Returns each room type with its visible rate plans and a per-night price breakdown for the range. This is the endpoint a reservation website renders.

Query parameterRequiredNotes
check_inyesYYYY-MM-DD.
check_outyesYYYY-MM-DD, after check_in. Stays are capped at 30 nights.
adultsyesInteger, at least 1.
childrennoInteger, at least 0. Default 0.
child_agesnoComma-separated child ages (for example 5,7). When present it is the child count and drives age-based pricing.
guest_idnoUnlocks guest-specific rates (local-verified, nationality, loyalty tier).
promo_codenoChecked against plans whose visibility rules ask for a code. Plans that need a promo code to be reserved never appear here; see Offers and promo codes.

Visibility is enforced on the server

A rate plan can carry rules: local residents only, a nationality, a loyalty tier, a minimum stay, or a promo code. The API checks them against the request and returns only the plans the guest may book. It also leaves out plans outside their sale or stay window, or whose length-of-stay and day-of-week rules the stay does not meet. The same checks run again when you create a hold, so a plan that was never shown cannot be reserved by id.

curl "$VRDN_BASE/rates?check_in=2026-08-01&check_out=2026-08-04&adults=2" \
  -H "Authorization: Bearer $VRDN_KEY"
{
  "check_in": "2026-08-01",
  "check_out": "2026-08-04",
  "data": [
    {
      "room_type_id": "9b2f6c3e-8d1a-4f5b-a7c9-4e0d2b8f1a63",
      "name": "Deluxe Ocean Villa",
      "description": "A private villa over the lagoon.",
      "max_occupancy": 3,
      "base_occupancy": 2,
      "amenities": ["Ocean view", "Private deck"],
      "photos": ["https://veridien.app/files/example/deluxe-1.jpg"],
      "rate_plans": [
        {
          "rate_plan_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02",
          "name": "BAR-FLEX",
          "public_name": "Flexible",
          "kind": "standard",
          "description": "Free cancellation until 7 days before arrival.",
          "image_url": null,
          "currency": "USD",
          "total": "1260.00",
          "room_subtotal": "1260.00",
          "base_occupancy": 2,
          "extra_guest_charge": "0.00",
          "single_occupancy_discount": "0.00",
          "extra_guest_total": "0.00",
          "taxes_total": "0.00",
          "tax_breakdown": [
            { "title": "GST", "amount": "135.00", "is_inclusive": true, "rate": "12", "kind": "percent" }
          ],
          "inclusions": [],
          "nightly_rates": [
            { "date": "2026-08-01", "day_of_week": 6, "rate": "420.00", "source": "base_price" },
            { "date": "2026-08-02", "day_of_week": 0, "rate": "420.00", "source": "base_price" },
            { "date": "2026-08-03", "day_of_week": 1, "rate": "420.00", "source": "base_price" }
          ]
        }
      ]
    }
  ]
}

Each nightly rate reports its source: interval when a seasonal interval set the price for that day, override when the property's revenue optimization set a daily price, or base_price when it fell back to the plan's base price.

The room type carries base_occupancy, the number of guests included before extra-guest pricing applies. Each rate plan reports a full price breakdown:

FieldTypeNotes
namestringThe plan's internal name.
public_namestringThe name to show guests. Falls back to name.
kindstringstandard or promotion.
description / image_urlstring | nullGuest-facing merchandising.
totalstringThe fully priced stay, including any non-inclusive taxes. This equals the hold total.
room_subtotalstringSum of the nightly rates before occupancy adjustments and taxes.
base_occupancyintegerGuests included in the base rate; extra-guest pricing applies above this.
extra_guest_chargestringThe plan's per-night charge for each guest beyond base_occupancy.
single_occupancy_discountstringTotal discount applied when the party is one guest.
extra_guest_totalstringTotal extra-guest supplement across the stay.
taxes_totalstringTotal of non-inclusive taxes added to total. Inclusive taxes are not counted here.
tax_breakdownarrayPer-charge lines: title, amount, is_inclusive, rate, kind. Inclusive lines are shown for transparency and do not add to total.
inclusionsarrayWhat the plan bundles: label, allocated_amount, currency, frequency, inclusion_kind (perk or credit), revenue_category, included_quantity.

The same charge engine prices the hold, so this total always equals the total you get from POST /holds. A plan the engine cannot price is left out rather than shown at a wrong price.


List services

GET /services

Scope: availability:read

Returns the add-ons guests can book themselves (for example, an airport transfer), for a booking flow's add-ons step. Only active, guest-bookable services are returned, with their modifiers (the options and fields a guest fills in).

Query parameterRequiredNotes
categorynoReturn only this category: transport, food_and_beverage, spa_and_wellness, activities, laundry, communication, or other. Any other value returns an empty list.
curl "$VRDN_BASE/services?category=transport" -H "Authorization: Bearer $VRDN_KEY"
{
  "data": [
    {
      "id": "f1c8e5a3-6b2d-4c9f-8a7e-3d0b5c2f6e94",
      "name": "Airport transfer",
      "category": "transport",
      "provider_name": "Harbour Transfers",
      "image_url": "https://veridien.app/files/example/transfer.jpg",
      "short_description": "Private speedboat from the international airport.",
      "currency": "USD",
      "is_taxable": true,
      "modifiers": []
    }
  ]
}
FieldTypeNotes
idstringService id, sent as service_id in a hold's add_ons.
namestringDisplay name.
categorystringOne of the categories above.
provider_namestring | nullWho provides the service.
image_urlstring | nullMerchandising image.
short_descriptionstring | nullOne-line description.
currencystringPricing currency; defaults to the property's base currency.
is_taxablebooleanWhether taxes apply to the add-on.
modifiersarrayThe options and fields (priced choices, date and text inputs) the guest fills in when adding it to a hold.

To add a chosen service to a reservation, send it in the add_ons field of POST /holds.

  • Reservations: turn a rate into a hold and a confirmed reservation.
  • Rate plans: how rate plans and seasonal intervals are set up in the dashboard.