Launching soon.Get early access
Veridien Docs
API Reference

Property & Catalog

The catalog endpoints are read-only and describe what you can sell: the property itself, its room types, real-time availability, and the rate plans a guest is eligible to book.


GET /property

Returns metadata for the property the key is bound to. Any authenticated key may call it.

curl "$VRDN_BASE/property" -H "Authorization: Bearer $VRDN_KEY"
{
  "id": "p_8f2a1c",
  "slug": "sunrise-bay",
  "name": "Sunrise Bay Resort",
  "currency": "USD",
  "timezone": "Pacific/Fiji",
  "child_max_age": 12,
  "infant_max_age": 2
}
FieldTypeNotes
idstringProperty identifier.
slugstringURL slug.
namestringDisplay name.
currencystringThe property's base currency (ISO 4217).
timezonestringIANA time zone, used for "today" in rate windows.
child_max_ageintegerGuests at or under this age price as children.
infant_max_ageintegerGuests at or under this age price as infants.

GET /room-types

Scope: availability:read

Every room type with its merchandising data: description, occupancy, amenities, bed configurations, 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"],
      "bed_configs": [{ "id": "bc_king", "label": "1 King" }],
      "photos": ["https://cdn.veridien.app/p_8f2a1c/deluxe-1.jpg"]
    }
  ]
}

GET /availability

Scope: availability:read

The minimum number of rooms available across every night of the range, per room type. 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 ≥ 1.
childrennoInteger ≥ 0, default 0.
child_agesnoComma-separated child ages (e.g. 5,7).
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"],
      "bed_configs": [{ "id": "bc_king", "label": "1 King" }],
      "photos": ["https://cdn.veridien.app/p_8f2a1c/deluxe-1.jpg"]
    }
  ]
}

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


GET /rates

Scope: availability:read

Each room type with its visible rate plans and a per-night price breakdown for the range. This is the endpoint a booking engine renders.

Query parameterRequiredNotes
check_inyesYYYY-MM-DD.
check_outyesYYYY-MM-DD, after check_in.
adultsyesInteger ≥ 1.
childrennoInteger ≥ 0, default 0.
child_agesnoComma-separated child ages (e.g. 5,7). When present it is the authoritative child count and drives age-bracket pricing.
guest_idnoUnlocks guest-specific rates (local-verified, loyalty-tier).
promo_codenoUnlocks promo-gated rates.

Visibility is enforced server-side

Rate plans can carry rules: local-residents-only, requires a promo code, minimum stay, advance-purchase window, or a loyalty tier. The API evaluates these against the request context and returns only the plans the guest is eligible for. The same rules are re-checked when you create a hold, so a plan that was never shown cannot be booked by id.

curl "$VRDN_BASE/rates?check_in=2026-08-01&check_out=2026-08-04&adults=2&promo_code=SUMMER" \
  -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"],
      "bed_configs": [{ "id": "bc_king", "label": "1 King" }],
      "photos": ["https://cdn.veridien.app/p_8f2a1c/deluxe-1.jpg"],
      "rate_plans": [
        {
          "rate_plan_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02",
          "name": "Flexible",
          "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" }
          ],
          "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, 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) and its bed_configs. Each rate plan reports a full price breakdown:

FieldTypeNotes
totalstringThe fully-priced stay total, 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 a single occupant.
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.

Because the same charge engine prices the hold, this total always equals the total you receive from POST /holds.


GET /services

Scope: availability:read

Guest-bookable add-ons (for example, an airport transfer) for a booking engine's "Add to Your Room" step. Returns only active, guest-bookable services with their modifiers (the options and data-capture fields a guest fills in). Pass ?category= to filter by category.

Query parameterRequiredNotes
categorynoReturn only services in this category (for example, transport).
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://cdn.veridien.app/p_8f2a1c/transfer.jpg",
      "short_description": "Private speedboat from the international airport.",
      "currency": "USD",
      "is_taxable": true,
      "modifiers": []
    }
  ]
}
FieldTypeNotes
idstringService identifier, referenced as service_id in a hold's add_ons.
namestringDisplay name.
categorystring | nullCategory label used by the ?category= filter.
provider_namestring | nullThe provider fulfilling 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 data-capture fields (priced selects, datetime/text inputs) the guest supplies when adding it to a hold.

Attach a chosen service to a booking through the add_ons field on POST /holds.

  • Reservations: turn a rate into a hold and a confirmed reservation.
  • Rate Plans: how rate plans and seasonal intervals are configured.