api-client

Every exchange behind these pages

Newest first. Bearer keys are redacted at capture — nothing here ever held one.

#268 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/ → 404 19 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: text/html
< transfer-encoding: chunked
< connection: keep-alive
< cache-control: private, no-cache, max-age=0
< pragma: no-cache
< x-turbo-charged-by: LiteSpeed
< content-encoding: gzip
< vary: Accept-Encoding
< strict-transport-security: max-age=63072000; preload

<!DOCTYPE html>
<html style="height:100%">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title> 404 Not Found
</title><style>@media (prefers-color-scheme:dark){body{background-color:#000!important}}</style></head>
<body style="color: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;">
<div style="height:auto; min-height:100%; ">     <div style="text-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;">
        <h1 style="margin:0; font-size:150px; line-height:150px; font-weight:bold;">404</h1>
<h2 style="margin-top:20px;font-size: 30px;">Not Found
</h2>
<p>The resource requested could not be found on this server!</p>
</div></div><div style="color:#f0f0f0; font-size:12px;margin:auto;padding:0px 30px 0px 30px;position:relative;clear:both;height:100px;margin-top:-101px;background-color:#474747;border-top: 1px solid rgba(0,0,0,0.15);box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset;">
<br>Proudly powered by LiteSpeed Web Server<p>Please be advised that LiteSpeed Technologies Inc. is not a web hosting company and, as such, has no control over content found on this site.</p></div></body></html>
#267 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/openapi.yaml → 404 20 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: text/html
< transfer-encoding: chunked
< connection: keep-alive
< cache-control: private, no-cache, max-age=0
< pragma: no-cache
< x-turbo-charged-by: LiteSpeed
< content-encoding: gzip
< vary: Accept-Encoding
< strict-transport-security: max-age=63072000; preload

<!DOCTYPE html>
<html style="height:100%">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title> 404 Not Found
</title><style>@media (prefers-color-scheme:dark){body{background-color:#000!important}}</style></head>
<body style="color: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;">
<div style="height:auto; min-height:100%; ">     <div style="text-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;">
        <h1 style="margin:0; font-size:150px; line-height:150px; font-weight:bold;">404</h1>
<h2 style="margin-top:20px;font-size: 30px;">Not Found
</h2>
<p>The resource requested could not be found on this server!</p>
</div></div><div style="color:#f0f0f0; font-size:12px;margin:auto;padding:0px 30px 0px 30px;position:relative;clear:both;height:100px;margin-top:-101px;background-color:#474747;border-top: 1px solid rgba(0,0,0,0.15);box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset;">
<br>Proudly powered by LiteSpeed Web Server<p>Please be advised that LiteSpeed Technologies Inc. is not a web hosting company and, as such, has no control over content found on this site.</p></div></body></html>
#266 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/llms.txt → 200 22 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: text/plain
< content-length: 774
< connection: keep-alive
< etag: "58f-6a9ef6fa-a057a;gz"
< last-modified: Mon, 07 Sep 2026 17:40:10 GMT
< accept-ranges: bytes
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< strict-transport-security: max-age=63072000; preload
< x-served-by: api.transmekong.com

# TransMékong / Bassac cruises — API for agents and integrators

> Bassac (TransMékong) runs one-night Mekong Delta river cruises between
> Cái Bè and Cần Thơ, Vietnam. This API follows the OCTO standard
> (https://octo.travel) for tours & activities.

Base URL: https://octo.transmekong.com/v1
(scheduler.transmekong.com/api/v1 is a permanent alias of the same API.)

## Discovery (open, no key required)

- GET /v1/supplier — who we are
- GET /v1/products — sellable itineraries (currently caibe-cantho,
  cantho-caibe, cantho-cantho); units are twin/double cabins, paxCount 2
  each — sold by the cabin, not by the passenger
- POST /v1/availability/calendar — date-range availability
- POST /v1/availability — a specific date/cabin-mix check

Availability ranges are capped at 92 days per request.

## Booking (requires a bearer key with the `hold` competence)

- POST /v1/bookings — Booking Reservation (a temporary hold)
- POST /v1/bookings/{uuid}/confirm — Booking Confirmation

## Get a key

- Read-only key, no partner account needed:
  https://octo.transmekong.com/getakey.php
- Booking-capable key, for existing partners:
  https://partner.transmekong.com/pApiKey.php

## Documentation

- Integration guide: https://partner.transmekong.com/serve_userguide.php?f=papi
- Terms of use: https://partner.transmekong.com/api_terms.php

## Contact

bassac@mekong-delta.com — +84 (0)292 382 9540
#265 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/ → 200 33 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: text/html; charset=UTF-8
< content-length: 1755
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>TransMékong Developer API</title>
    <style>
        :root { --tm-bg: #fdfcf8; --tm-header: #eae0af; --tm-text: #222; --tm-accent: #63574c; }
        * { box-sizing: border-box; }
        body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
               margin: 0; background: var(--tm-bg); color: var(--tm-text); line-height: 1.65; }
        .site-bar { background: var(--tm-header); padding: 8px 18px; font-size: 0.95em;
                    border-bottom: 1px solid #ccc; }
        .site-bar a { color: #333; text-decoration: none; font-weight: bold; }
        .wrap { max-width: 720px; margin: 0 auto; padding: 22px 18px 56px; }
        h1 { color: #222; border-bottom: 2px solid var(--tm-header); padding-bottom: 8px; margin-top: 0.4em; }
        h2 { color: #4f463d; margin-top: 1.8em; font-size: 1.15em; }
        a { color: #6a5a3c; }
        code { background: #f0ede0; padding: 2px 6px; border-radius: 3px; font-size: 0.9em; }
        .base { display: inline-block; background: #fff; border: 1px solid #e2dcc7; border-radius: 5px;
                padding: 8px 14px; font-size: 1.05em; margin-top: 6px; }
        ul.ep { list-style: none; padding-left: 0; }
        ul.ep li { padding: 5px 0; border-bottom: 1px solid #efe9d6; }
        .verb { display: inline-block; min-width: 3.4em; font-weight: bold; font-size: 0.82em;
                color: #6a5a3c; }
        .cta { display: inline-block; background: var(--tm-accent); color: #fff; text-decoration: none;
               border-radius: 4px; padding: 10px 22px; margin-top: 10px; font-weight: bold; }
        .cta:hover { background: #4f463d; }
        .foot { margin-top: 2.6rem; font-size: 0.9em; color: #777; }
    </style>
</head>
<body>
<div class="site-bar"><a href="/">TransMékong · Developer API</a></div>
<div class="wrap">
    <h1>TransMékong Developer API</h1>
    <p>Bassac (TransMékong) runs one-night Mekong Delta river cruises between Cái Bè and Cần Thơ,
       Vietnam. This API follows the <a href="https://octo.travel">OCTO</a> standard for tours &amp;
       activities — supplier, products, availability, and the booking lifecycle.</p>

    <p><span class="base">Base URL &nbsp;<code>https://octo.transmekong.com/v1</code></span></p>

    <h2>Discovery — open, no key required</h2>
    <ul class="ep">
        <li><span class="verb">GET</span> <a href="/v1/supplier">/v1/supplier</a> — who we are</li>
        <li><span class="verb">GET</span> <a href="/v1/products">/v1/products</a> — sellable itineraries (cabins are twin/double, sold by the cabin)</li>
        <li><span class="verb">GET</span> <a href="/v1/capabilities">/v1/capabilities</a> — supported OCTO capabilities</li>
        <li><span class="verb">POST</span> <code>/v1/availability/calendar</code> — date-range availability</li>
        <li><span class="verb">POST</span> <
#264 2026-09-07T18:13:06+00:00 OPTIONS https://api.transmekong.com/v1/services → 204 30 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: text/html; charset=UTF-8
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

#263 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/bookings/no.such.booking → 401 38 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 142
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "key-missing",
 "message": "No API key on this request: send it as `Authorization: Bearer \u003ckey\u003e` \u2014 the header, nowhere else."
}
#262 2026-09-07T18:13:06+00:00 POST https://api.transmekong.com/v1/bookings → 401 39 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
> Content-Type: application/json
> {"attemptKey": "b4b054a2-2a68-416d-bcf3-780c4d6ff5a3"}
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 142
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "key-missing",
 "message": "No API key on this request: send it as `Authorization: Bearer \u003ckey\u003e` \u2014 the header, nowhere else."
}
#261 2026-09-07T18:13:06+00:00 POST https://api.transmekong.com/v1/quote → 404 49 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
> Content-Type: application/json
> {"date": "2026-09-21", "lines": [{"nights": 1, "qty": 1, "saleTypeId": "junior"}], "serviceCode": "nambo", "serviceFamily": "accommodation", "variantId": "no-such-variant"}
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 110
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "variant-unknown",
 "message": "`no-such-variant` \u2014 the one variant on sale is `standard`"
}
#260 2026-09-07T18:13:06+00:00 POST https://api.transmekong.com/v1/quote → 422 77 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
> Content-Type: application/json
> {"date": "2026-09-21", "lines": [{"nights": 1, "qty": 1, "saleTypeId": "no-such-sale-type"}], "serviceCode": "nambo", "serviceFamily": "accommodation", "variantId": "standard"}
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 132
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "itinerary-not-quotable",
 "message": "no sale type `no-such-sale-type` \u2014 the categories are junior, main, corner."
}
#259 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/availability → 422 23 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 88
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "field-invalid",
 "message": "`date` is required, Y-m-d"
}
#258 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/services/accommodation/no-such-service → 404 52 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 129
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "service-unknown",
 "message": "`accommodation/no-such-service` is not a service the model lists \u2014 nambo, lighthouse"
}
#257 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/services/overnight-cruise/anything → 404 25 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 140
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "family-unmodelled",
 "message": "`overnight-cruise` is not sold on this surface yet \u2014 the model answers accommodation here today."
}
#256 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/services?serviceFamily=overnight-cruise → 200 37 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< transfer-encoding: chunked
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "services": [
  {
   "ageGroups": [
    {
     "ageFrom": 0,
     "ageTo": 4,
     "id": "infant",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 4,
     "id": "child",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 120,
     "id": "adult",
     "level": "family"
    }
   ],
   "compositions": [
    {
     "adults": 1,
     "children": 0,
     "id": "junior-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "junior-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "junior-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 2,
     "id": "junior-double-2children",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 4,
     "children": 0,
     "id": "junior-quad",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "main-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "main-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "main-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "corner-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "corner"
    }
   ],
   "content": [],
   "counterpart": null,
   "disembarkPlaceId": null,
   "durationMinutes": null,
   "embarkPlaceId": null,
   "embarkTimeLocal": "14:00",
   "exclusivity": "shared",
   "extras": [
    {
     "basis": "per-person",
     "free": false,
     "id": "breakfast",
     "saleMode": "always",
     "title": "Breakfast at the hotel"
    },
    {
     "basis": "per-person",
     "free": false,
     "id": "extra-guest",
     "saleMode": "always",
     "title": "Additional guest / extra bed"
    },
    {
     "basis": "per-booking",
     "free": false,
     "id": "late-checkout",
     "saleMode": "on-request",
     "title": "Late check-out"
    },
    {
     "basis": "per-booking",
     "free": true,
     "id": "cot",
     "saleMode": "on-request",
     "title": "Baby cot"
    }
   ],
   "itinerary": {
    "kind": "route"
   },
   "nights": 1,
   "rules": {
    "booking-grace": {
     "enforced": false,
     "source": "booking-grace",
     "value": {
      "capped_by": "departure",
      "enforced": false,
      "enforced_by": [
       "native-api cancel (Rules::refundFor, 05-Sep-2026)"
      ],
      "from": "booking",
      "hours": 24,
      "overrides": [
       "cut-off",
       "no-show",
       "no-refund plans"
      ],
      "precision": "minute",
      "supplier_charges": "absorbed"
     }
    },
    "cut-off": {
     "enforced": true,
     "source": "cut-off",
     "value": {
      "boundary": "end-of-day",
      "days": 5,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "hold-ttl": {
     "enforced": true,
     "source": "hold-ttl",
     "value": {
      "from": "hold",
      "minutes": 15,
      "then": "confirm re-reads the feed and tells the desk",
      "told": "nobody"
     }
    },
    "no-show": {
     "enforced": true,
     "source": "no-show",
     "value": {
      "boundary": "end-of-day",
      "days": 0,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "refund-tiers": {
     "enforced": true,
     "source": "refund-tiers",
     "value": {
      "anchor": "check-in",
      "bands": [
       {
        "cap_nights": 0.5,
        "id": "early",
        "of": "stay",
        "retained_pct": 5,
        "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
        "until_days": 5
       },
       {
        "id": "partial",
        "of": "night",
        "retained_pct": 50,
        "text": "between 4 days and 48 hours before arrival: 50 % of one night",
        "until_days": 2
       },
       {
        "id": "late",
        "of": "night",
        "retained_pct": 100,
        "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
        "until_days": 0
       },
       {
        "id": "no-show",
        "no_show": true,
        "of": "stay",
        "retained_pct": 100,
        "text": "no-show: the full stay"
       }
      ],
      "boundary": "end-of-day",
      "grace_first": true,
      "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
      "timezone": "Asia/Ho_Chi_Minh"
     }
    }
   },
   "saleTypes": [
    {
     "basis": "per-room",
     "capacity": 4,
     "id": "junior",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "main",
     "inventory": 4,
     "maxUnitsPerBooking": 4,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 2,
     "id": "corner",
     "inventory": 2,
     "maxUnitsPerBooking": 2,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    }
   ],
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "title": "Nam B\u1ed9 Boutique Hotel",
   "variants": [
    {
     "axes": [],
     "onSale": true,
     "title": "Nam B\u1ed9 Boutique Hotel",
     "variantId": "standard"
    }
   ]
  },
  {
   "ageGroups": [
    {
     "ageFrom": 0,
     "ageTo": 4,
     "id": "infant",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 4,
     "id": "child",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 120,
     "id": "adult",
     "level": "family"
    }
   ],
   "compositions": [
    {
     "adults": 1,
     "children": 0,
     "id": "main-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "main-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "main-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "corner-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "corner-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "corner-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 2,
     "id": "corner-double-2children",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 4,
     "children": 0,
     "id": "corner-quad",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "cozy-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "cozy-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "cozy-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "standard-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "standard"
    }
   ],
   "content": [],
   "counterpart": null,
   "disembarkPlaceId": null,
   "durationMinutes": null,
   "embarkPlaceId": null,
   "embarkTimeLocal": "14:00",
   "exclusivity": "shared",
   "extras": [
    {
     "basis": "per-person",
     "free": false,
     "id": "breakfast",
     "saleMode": "always",
     "title": "Breakfast at the hotel"
    },
    {
     "basis": "per-person",
     "free": false,
     "id": "extra-guest",
     "saleMode": "always",
     "title": "Additional guest / extra bed"
    },
    {
     "basis": "per-booking",
     "free": false,
     "id": "late-checkout",
     "saleMode": "on-request",
     "title": "Late check-out"
    },
    {
     "basis": "per-booking",
     "free": true,
     "id": "cot",
     "saleMode": "on-request",
     "title": "Baby cot"
    }
   ],
   "itinerary": {
    "kind": "route"
   },
   "nights": 1,
   "rules": {
    "booking-grace": {
     "enforced": false,
     "source": "booking-grace",
     "value": {
      "capped_by": "departure",
      "enforced": false,
      "enforced_by": [
       "native-api cancel (Rules::refundFor, 05-Sep-2026)"
      ],
      "from": "booking",
      "hours": 24,
      "overrides": [
       "cut-off",
       "no-show",
       "no-refund plans"
      ],
      "precision": "minute",
      "supplier_charges": "absorbed"
     }
    },
    "cut-off": {
     "enforced": true,
     "source": "cut-off",
     "value": {
      "boundary": "end-of-day",
      "days": 5,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "hold-ttl": {
     "enforced": true,
     "source": "hold-ttl",
     "value": {
      "from": "hold",
      "minutes": 15,
      "then": "confirm re-reads the feed and tells the desk",
      "told": "nobody"
     }
    },
    "no-show": {
     "enforced": true,
     "source": "no-show",
     "value": {
      "boundary": "end-of-day",
      "days": 0,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "refund-tiers": {
     "enforced": true,
     "source": "refund-tiers",
     "value": {
      "anchor": "check-in",
      "bands": [
       {
        "cap_nights": 0.5,
        "id": "early",
        "of": "stay",
        "retained_pct": 5,
        "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
        "until_days": 5
       },
       {
        "id": "partial",
        "of": "night",
        "retained_pct": 50,
        "text": "between 4 days and 48 hours before arrival: 50 % of one night",
        "until_days": 2
       },
       {
        "id": "late",
        "of": "night",
        "retained_pct": 100,
        "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
        "until_days": 0
       },
       {
        "id": "no-show",
        "no_show": true,
        "of": "stay",
        "retained_pct": 100,
        "text": "no-show: the full stay"
       }
      ],
      "boundary": "end-of-day",
      "grace_first": true,
      "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
      "timezone": "Asia/Ho_Chi_Minh"
     }
    }
   },
   "saleTypes": [
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "main",
     "inventory": 2,
     "maxUnitsPerBooking": 2,
     "resourceClass": "flat",
     "resourceTitle": "Main Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 4,
     "id": "corner",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "flat",
     "resourceTitle": "River Front Corner Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "cozy",
     "inventory": 0,
     "maxUnitsPerBooking": 0,
     "resourceClass": "flat",
     "resourceTitle": "River Front Cozy Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 2,
     "id": "standard",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "flat",
     "resourceTitle": "Standard room #22",
     "shortCode": null
    }
   ],
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "title": "the Lighthouse",
   "variants": [
    {
     "axes": [],
     "onSale": true,
     "title": "the Lighthouse",
     "variantId": "standard"
    }
   ]
  }
 ]
}
#255 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/services?serviceFamily=not-a-family → 200 39 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< transfer-encoding: chunked
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "services": [
  {
   "ageGroups": [
    {
     "ageFrom": 0,
     "ageTo": 4,
     "id": "infant",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 4,
     "id": "child",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 120,
     "id": "adult",
     "level": "family"
    }
   ],
   "compositions": [
    {
     "adults": 1,
     "children": 0,
     "id": "junior-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "junior-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "junior-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 2,
     "id": "junior-double-2children",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 4,
     "children": 0,
     "id": "junior-quad",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "main-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "main-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "main-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "corner-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "corner"
    }
   ],
   "content": [],
   "counterpart": null,
   "disembarkPlaceId": null,
   "durationMinutes": null,
   "embarkPlaceId": null,
   "embarkTimeLocal": "14:00",
   "exclusivity": "shared",
   "extras": [
    {
     "basis": "per-person",
     "free": false,
     "id": "breakfast",
     "saleMode": "always",
     "title": "Breakfast at the hotel"
    },
    {
     "basis": "per-person",
     "free": false,
     "id": "extra-guest",
     "saleMode": "always",
     "title": "Additional guest / extra bed"
    },
    {
     "basis": "per-booking",
     "free": false,
     "id": "late-checkout",
     "saleMode": "on-request",
     "title": "Late check-out"
    },
    {
     "basis": "per-booking",
     "free": true,
     "id": "cot",
     "saleMode": "on-request",
     "title": "Baby cot"
    }
   ],
   "itinerary": {
    "kind": "route"
   },
   "nights": 1,
   "rules": {
    "booking-grace": {
     "enforced": false,
     "source": "booking-grace",
     "value": {
      "capped_by": "departure",
      "enforced": false,
      "enforced_by": [
       "native-api cancel (Rules::refundFor, 05-Sep-2026)"
      ],
      "from": "booking",
      "hours": 24,
      "overrides": [
       "cut-off",
       "no-show",
       "no-refund plans"
      ],
      "precision": "minute",
      "supplier_charges": "absorbed"
     }
    },
    "cut-off": {
     "enforced": true,
     "source": "cut-off",
     "value": {
      "boundary": "end-of-day",
      "days": 5,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "hold-ttl": {
     "enforced": true,
     "source": "hold-ttl",
     "value": {
      "from": "hold",
      "minutes": 15,
      "then": "confirm re-reads the feed and tells the desk",
      "told": "nobody"
     }
    },
    "no-show": {
     "enforced": true,
     "source": "no-show",
     "value": {
      "boundary": "end-of-day",
      "days": 0,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "refund-tiers": {
     "enforced": true,
     "source": "refund-tiers",
     "value": {
      "anchor": "check-in",
      "bands": [
       {
        "cap_nights": 0.5,
        "id": "early",
        "of": "stay",
        "retained_pct": 5,
        "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
        "until_days": 5
       },
       {
        "id": "partial",
        "of": "night",
        "retained_pct": 50,
        "text": "between 4 days and 48 hours before arrival: 50 % of one night",
        "until_days": 2
       },
       {
        "id": "late",
        "of": "night",
        "retained_pct": 100,
        "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
        "until_days": 0
       },
       {
        "id": "no-show",
        "no_show": true,
        "of": "stay",
        "retained_pct": 100,
        "text": "no-show: the full stay"
       }
      ],
      "boundary": "end-of-day",
      "grace_first": true,
      "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
      "timezone": "Asia/Ho_Chi_Minh"
     }
    }
   },
   "saleTypes": [
    {
     "basis": "per-room",
     "capacity": 4,
     "id": "junior",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "main",
     "inventory": 4,
     "maxUnitsPerBooking": 4,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 2,
     "id": "corner",
     "inventory": 2,
     "maxUnitsPerBooking": 2,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    }
   ],
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "title": "Nam B\u1ed9 Boutique Hotel",
   "variants": [
    {
     "axes": [],
     "onSale": true,
     "title": "Nam B\u1ed9 Boutique Hotel",
     "variantId": "standard"
    }
   ]
  },
  {
   "ageGroups": [
    {
     "ageFrom": 0,
     "ageTo": 4,
     "id": "infant",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 4,
     "id": "child",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 120,
     "id": "adult",
     "level": "family"
    }
   ],
   "compositions": [
    {
     "adults": 1,
     "children": 0,
     "id": "main-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "main-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "main-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "corner-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "corner-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "corner-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 2,
     "id": "corner-double-2children",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 4,
     "children": 0,
     "id": "corner-quad",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "cozy-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "cozy-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "cozy-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "standard-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "standard"
    }
   ],
   "content": [],
   "counterpart": null,
   "disembarkPlaceId": null,
   "durationMinutes": null,
   "embarkPlaceId": null,
   "embarkTimeLocal": "14:00",
   "exclusivity": "shared",
   "extras": [
    {
     "basis": "per-person",
     "free": false,
     "id": "breakfast",
     "saleMode": "always",
     "title": "Breakfast at the hotel"
    },
    {
     "basis": "per-person",
     "free": false,
     "id": "extra-guest",
     "saleMode": "always",
     "title": "Additional guest / extra bed"
    },
    {
     "basis": "per-booking",
     "free": false,
     "id": "late-checkout",
     "saleMode": "on-request",
     "title": "Late check-out"
    },
    {
     "basis": "per-booking",
     "free": true,
     "id": "cot",
     "saleMode": "on-request",
     "title": "Baby cot"
    }
   ],
   "itinerary": {
    "kind": "route"
   },
   "nights": 1,
   "rules": {
    "booking-grace": {
     "enforced": false,
     "source": "booking-grace",
     "value": {
      "capped_by": "departure",
      "enforced": false,
      "enforced_by": [
       "native-api cancel (Rules::refundFor, 05-Sep-2026)"
      ],
      "from": "booking",
      "hours": 24,
      "overrides": [
       "cut-off",
       "no-show",
       "no-refund plans"
      ],
      "precision": "minute",
      "supplier_charges": "absorbed"
     }
    },
    "cut-off": {
     "enforced": true,
     "source": "cut-off",
     "value": {
      "boundary": "end-of-day",
      "days": 5,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "hold-ttl": {
     "enforced": true,
     "source": "hold-ttl",
     "value": {
      "from": "hold",
      "minutes": 15,
      "then": "confirm re-reads the feed and tells the desk",
      "told": "nobody"
     }
    },
    "no-show": {
     "enforced": true,
     "source": "no-show",
     "value": {
      "boundary": "end-of-day",
      "days": 0,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "refund-tiers": {
     "enforced": true,
     "source": "refund-tiers",
     "value": {
      "anchor": "check-in",
      "bands": [
       {
        "cap_nights": 0.5,
        "id": "early",
        "of": "stay",
        "retained_pct": 5,
        "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
        "until_days": 5
       },
       {
        "id": "partial",
        "of": "night",
        "retained_pct": 50,
        "text": "between 4 days and 48 hours before arrival: 50 % of one night",
        "until_days": 2
       },
       {
        "id": "late",
        "of": "night",
        "retained_pct": 100,
        "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
        "until_days": 0
       },
       {
        "id": "no-show",
        "no_show": true,
        "of": "stay",
        "retained_pct": 100,
        "text": "no-show: the full stay"
       }
      ],
      "boundary": "end-of-day",
      "grace_first": true,
      "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
      "timezone": "Asia/Ho_Chi_Minh"
     }
    }
   },
   "saleTypes": [
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "main",
     "inventory": 2,
     "maxUnitsPerBooking": 2,
     "resourceClass": "flat",
     "resourceTitle": "Main Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 4,
     "id": "corner",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "flat",
     "resourceTitle": "River Front Corner Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "cozy",
     "inventory": 0,
     "maxUnitsPerBooking": 0,
     "resourceClass": "flat",
     "resourceTitle": "River Front Cozy Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 2,
     "id": "standard",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "flat",
     "resourceTitle": "Standard room #22",
     "shortCode": null
    }
   ],
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "title": "the Lighthouse",
   "variants": [
    {
     "axes": [],
     "onSale": true,
     "title": "the Lighthouse",
     "variantId": "standard"
    }
   ]
  }
 ]
}
#254 2026-09-07T18:13:06+00:00 POST https://api.transmekong.com/v1/quote → 422 43 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
> Content-Type: application/json
> {"date": "2026-09-07", "lines": [{"nights": 1, "qty": 1, "saleTypeId": "main"}], "serviceCode": "lighthouse", "serviceFamily": "accommodation", "variantId": "standard"}
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 84
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "field-invalid",
 "message": "`date` is in the past"
}
#253 2026-09-07T18:13:06+00:00 POST https://api.transmekong.com/v1/quote → 422 38 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
> Content-Type: application/json
> {"date": "2026-09-07", "lines": [{"nights": 1, "qty": 1, "saleTypeId": "junior"}], "serviceCode": "nambo", "serviceFamily": "accommodation", "variantId": "standard"}
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 84
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed

{
 "error": "field-invalid",
 "message": "`date` is in the past"
}
#252 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/availability?date=2026-10-06 → 200 64 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-10-06",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:05",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:16",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 1,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#251 2026-09-07T18:13:06+00:00 GET https://api.transmekong.com/v1/availability?date=2026-10-05 → 200 72 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 289
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-10-05",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:05",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:16",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 1,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#250 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-10-04 → 200 50 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:06 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-10-04",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:05",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:16",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#249 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-10-03 → 200 60 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 288
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-10-03",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 1,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#248 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-10-02 → 200 57 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 285
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-10-02",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#247 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-10-01 → 200 284 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 285
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-10-01",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#246 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-30 → 200 52 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-30",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#245 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-29 → 200 46 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-29",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#244 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-28 → 200 51 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 289
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-28",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 1,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#243 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-27 → 200 70 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 288
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-27",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 1,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#242 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-26 → 200 69 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-26",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#241 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-25 → 200 60 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-25",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 3,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#240 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-24 → 200 44 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-24",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#239 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-23 → 200 57 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-23",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#238 2026-09-07T18:13:05+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-22 → 200 60 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 285
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-22",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 1,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#237 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-21 → 200 70 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:05 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-21",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#236 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-20 → 200 46 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-20",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#235 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-19 → 200 55 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-19",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#234 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-18 → 200 69 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-18",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 3,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#233 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-17 → 200 70 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 284
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-17",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 2,
     "saleTypeId": "main"
    },
    {
     "count": 1,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#232 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-16 → 200 59 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-16",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 2,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#231 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-15 → 200 49 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-15",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 3,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#230 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-14 → 200 66 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 287
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-14",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "full",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#229 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-13 → 200 52 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 284
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-13",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:14",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#228 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-12 → 200 67 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 280
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-12",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "junior"
    },
    {
     "count": 3,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:13",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#227 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-11 → 200 57 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 286
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-11",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 0,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 1,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:13",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#226 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-10 → 200 47 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 285
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-10",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:13",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#225 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-09 → 200 69 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 284
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-09",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:13",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#224 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-08 → 200 53 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 285
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-08",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 3,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:13",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 0,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#223 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/availability?date=2026-09-07 → 200 66 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< content-length: 286
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "date": "2026-09-07",
 "entries": [
  {
   "asOf": "2026-09-07 17:00:04",
   "nights": 1,
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "junior"
    },
    {
     "count": 4,
     "saleTypeId": "main"
    },
    {
     "count": 2,
     "saleTypeId": "corner"
    }
   ],
   "variantId": "standard"
  },
  {
   "asOf": "2026-09-07 17:00:13",
   "nights": 1,
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "state": "on-sale",
   "vacancies": [
    {
     "count": 1,
     "saleTypeId": "main"
    },
    {
     "count": 0,
     "saleTypeId": "corner"
    },
    {
     "count": 0,
     "saleTypeId": "cozy"
    },
    {
     "count": 1,
     "saleTypeId": "standard"
    }
   ],
   "variantId": "standard"
  }
 ]
}
#222 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/services/accommodation/lighthouse → 200 60 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< transfer-encoding: chunked
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "ageGroups": [
  {
   "ageFrom": 0,
   "ageTo": 4,
   "id": "infant",
   "level": "family"
  },
  {
   "ageFrom": 5,
   "ageTo": 4,
   "id": "child",
   "level": "family"
  },
  {
   "ageFrom": 5,
   "ageTo": 120,
   "id": "adult",
   "level": "family"
  }
 ],
 "compositions": [
  {
   "adults": 1,
   "children": 0,
   "id": "main-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "main-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "main-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "main-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 1,
   "id": "main-double-1child",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 3,
   "children": 0,
   "id": "main-triple",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 1,
   "children": 0,
   "id": "corner-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "corner-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "corner-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "corner-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 1,
   "id": "corner-double-1child",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 3,
   "children": 0,
   "id": "corner-triple",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 2,
   "id": "corner-double-2children",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 4,
   "children": 0,
   "id": "corner-quad",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 1,
   "children": 0,
   "id": "cozy-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "cozy"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "cozy-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "cozy"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "cozy-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "cozy"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "cozy-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "cozy"
  },
  {
   "adults": 2,
   "children": 1,
   "id": "cozy-double-1child",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "cozy"
  },
  {
   "adults": 3,
   "children": 0,
   "id": "cozy-triple",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "cozy"
  },
  {
   "adults": 1,
   "children": 0,
   "id": "standard-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "standard"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "standard-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "standard"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "standard-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "standard"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "standard-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "standard"
  }
 ],
 "content": [],
 "counterpart": null,
 "disembarkPlaceId": null,
 "durationMinutes": null,
 "embarkPlaceId": null,
 "embarkTimeLocal": "14:00",
 "exclusivity": "shared",
 "extras": [
  {
   "basis": "per-person",
   "free": false,
   "id": "breakfast",
   "saleMode": "always",
   "title": "Breakfast at the hotel"
  },
  {
   "basis": "per-person",
   "free": false,
   "id": "extra-guest",
   "saleMode": "always",
   "title": "Additional guest / extra bed"
  },
  {
   "basis": "per-booking",
   "free": false,
   "id": "late-checkout",
   "saleMode": "on-request",
   "title": "Late check-out"
  },
  {
   "basis": "per-booking",
   "free": true,
   "id": "cot",
   "saleMode": "on-request",
   "title": "Baby cot"
  }
 ],
 "itinerary": {
  "kind": "route"
 },
 "nights": 1,
 "rules": {
  "booking-grace": {
   "enforced": false,
   "source": "booking-grace",
   "value": {
    "capped_by": "departure",
    "enforced": false,
    "enforced_by": [
     "native-api cancel (Rules::refundFor, 05-Sep-2026)"
    ],
    "from": "booking",
    "hours": 24,
    "overrides": [
     "cut-off",
     "no-show",
     "no-refund plans"
    ],
    "precision": "minute",
    "supplier_charges": "absorbed"
   }
  },
  "cut-off": {
   "enforced": true,
   "source": "cut-off",
   "value": {
    "boundary": "end-of-day",
    "days": 5,
    "timezone": "Asia/Ho_Chi_Minh"
   }
  },
  "hold-ttl": {
   "enforced": true,
   "source": "hold-ttl",
   "value": {
    "from": "hold",
    "minutes": 15,
    "then": "confirm re-reads the feed and tells the desk",
    "told": "nobody"
   }
  },
  "no-show": {
   "enforced": true,
   "source": "no-show",
   "value": {
    "boundary": "end-of-day",
    "days": 0,
    "timezone": "Asia/Ho_Chi_Minh"
   }
  },
  "refund-tiers": {
   "enforced": true,
   "source": "refund-tiers",
   "value": {
    "anchor": "check-in",
    "bands": [
     {
      "cap_nights": 0.5,
      "id": "early",
      "of": "stay",
      "retained_pct": 5,
      "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
      "until_days": 5
     },
     {
      "id": "partial",
      "of": "night",
      "retained_pct": 50,
      "text": "between 4 days and 48 hours before arrival: 50 % of one night",
      "until_days": 2
     },
     {
      "id": "late",
      "of": "night",
      "retained_pct": 100,
      "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
      "until_days": 0
     },
     {
      "id": "no-show",
      "no_show": true,
      "of": "stay",
      "retained_pct": 100,
      "text": "no-show: the full stay"
     }
    ],
    "boundary": "end-of-day",
    "grace_first": true,
    "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
    "timezone": "Asia/Ho_Chi_Minh"
   }
  }
 },
 "saleTypes": [
  {
   "basis": "per-room",
   "capacity": 3,
   "id": "main",
   "inventory": 2,
   "maxUnitsPerBooking": 2,
   "resourceClass": "flat",
   "resourceTitle": "Main Suite",
   "shortCode": null
  },
  {
   "basis": "per-room",
   "capacity": 4,
   "id": "corner",
   "inventory": 1,
   "maxUnitsPerBooking": 1,
   "resourceClass": "flat",
   "resourceTitle": "River Front Corner Suite",
   "shortCode": null
  },
  {
   "basis": "per-room",
   "capacity": 3,
   "id": "cozy",
   "inventory": 0,
   "maxUnitsPerBooking": 0,
   "resourceClass": "flat",
   "resourceTitle": "River Front Cozy Suite",
   "shortCode": null
  },
  {
   "basis": "per-room",
   "capacity": 2,
   "id": "standard",
   "inventory": 1,
   "maxUnitsPerBooking": 1,
   "resourceClass": "flat",
   "resourceTitle": "Standard room #22",
   "shortCode": null
  }
 ],
 "serviceCode": "lighthouse",
 "serviceFamily": "accommodation",
 "title": "the Lighthouse",
 "variants": [
  {
   "axes": [],
   "onSale": true,
   "title": "the Lighthouse",
   "variantId": "standard"
  }
 ]
}
#221 2026-09-07T18:13:04+00:00 GET https://api.transmekong.com/v1/services/accommodation/nambo → 200 53 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:04 GMT
< content-type: application/json; charset=utf-8
< transfer-encoding: chunked
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "ageGroups": [
  {
   "ageFrom": 0,
   "ageTo": 4,
   "id": "infant",
   "level": "family"
  },
  {
   "ageFrom": 5,
   "ageTo": 4,
   "id": "child",
   "level": "family"
  },
  {
   "ageFrom": 5,
   "ageTo": 120,
   "id": "adult",
   "level": "family"
  }
 ],
 "compositions": [
  {
   "adults": 1,
   "children": 0,
   "id": "junior-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "junior"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "junior-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "junior"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "junior-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "junior"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "junior-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "junior"
  },
  {
   "adults": 2,
   "children": 1,
   "id": "junior-double-1child",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "junior"
  },
  {
   "adults": 3,
   "children": 0,
   "id": "junior-triple",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "junior"
  },
  {
   "adults": 2,
   "children": 2,
   "id": "junior-double-2children",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "junior"
  },
  {
   "adults": 4,
   "children": 0,
   "id": "junior-quad",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "junior"
  },
  {
   "adults": 1,
   "children": 0,
   "id": "main-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "main-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "main-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "main-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "main"
  },
  {
   "adults": 2,
   "children": 1,
   "id": "main-double-1child",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 3,
   "children": 0,
   "id": "main-triple",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "main"
  },
  {
   "adults": 1,
   "children": 0,
   "id": "corner-single",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "corner-double",
   "infantMode": null,
   "infants": 0,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "corner-double-infant",
   "infantMode": "shared-bed",
   "infants": 1,
   "saleTypeId": "corner"
  },
  {
   "adults": 2,
   "children": 0,
   "id": "corner-double-2infants",
   "infantMode": "shared-bed",
   "infants": 2,
   "saleTypeId": "corner"
  }
 ],
 "content": [],
 "counterpart": null,
 "disembarkPlaceId": null,
 "durationMinutes": null,
 "embarkPlaceId": null,
 "embarkTimeLocal": "14:00",
 "exclusivity": "shared",
 "extras": [
  {
   "basis": "per-person",
   "free": false,
   "id": "breakfast",
   "saleMode": "always",
   "title": "Breakfast at the hotel"
  },
  {
   "basis": "per-person",
   "free": false,
   "id": "extra-guest",
   "saleMode": "always",
   "title": "Additional guest / extra bed"
  },
  {
   "basis": "per-booking",
   "free": false,
   "id": "late-checkout",
   "saleMode": "on-request",
   "title": "Late check-out"
  },
  {
   "basis": "per-booking",
   "free": true,
   "id": "cot",
   "saleMode": "on-request",
   "title": "Baby cot"
  }
 ],
 "itinerary": {
  "kind": "route"
 },
 "nights": 1,
 "rules": {
  "booking-grace": {
   "enforced": false,
   "source": "booking-grace",
   "value": {
    "capped_by": "departure",
    "enforced": false,
    "enforced_by": [
     "native-api cancel (Rules::refundFor, 05-Sep-2026)"
    ],
    "from": "booking",
    "hours": 24,
    "overrides": [
     "cut-off",
     "no-show",
     "no-refund plans"
    ],
    "precision": "minute",
    "supplier_charges": "absorbed"
   }
  },
  "cut-off": {
   "enforced": true,
   "source": "cut-off",
   "value": {
    "boundary": "end-of-day",
    "days": 5,
    "timezone": "Asia/Ho_Chi_Minh"
   }
  },
  "hold-ttl": {
   "enforced": true,
   "source": "hold-ttl",
   "value": {
    "from": "hold",
    "minutes": 15,
    "then": "confirm re-reads the feed and tells the desk",
    "told": "nobody"
   }
  },
  "no-show": {
   "enforced": true,
   "source": "no-show",
   "value": {
    "boundary": "end-of-day",
    "days": 0,
    "timezone": "Asia/Ho_Chi_Minh"
   }
  },
  "refund-tiers": {
   "enforced": true,
   "source": "refund-tiers",
   "value": {
    "anchor": "check-in",
    "bands": [
     {
      "cap_nights": 0.5,
      "id": "early",
      "of": "stay",
      "retained_pct": 5,
      "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
      "until_days": 5
     },
     {
      "id": "partial",
      "of": "night",
      "retained_pct": 50,
      "text": "between 4 days and 48 hours before arrival: 50 % of one night",
      "until_days": 2
     },
     {
      "id": "late",
      "of": "night",
      "retained_pct": 100,
      "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
      "until_days": 0
     },
     {
      "id": "no-show",
      "no_show": true,
      "of": "stay",
      "retained_pct": 100,
      "text": "no-show: the full stay"
     }
    ],
    "boundary": "end-of-day",
    "grace_first": true,
    "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
    "timezone": "Asia/Ho_Chi_Minh"
   }
  }
 },
 "saleTypes": [
  {
   "basis": "per-room",
   "capacity": 4,
   "id": "junior",
   "inventory": 1,
   "maxUnitsPerBooking": 1,
   "resourceClass": "suite",
   "resourceTitle": "Suite",
   "shortCode": null
  },
  {
   "basis": "per-room",
   "capacity": 3,
   "id": "main",
   "inventory": 4,
   "maxUnitsPerBooking": 4,
   "resourceClass": "suite",
   "resourceTitle": "Suite",
   "shortCode": null
  },
  {
   "basis": "per-room",
   "capacity": 2,
   "id": "corner",
   "inventory": 2,
   "maxUnitsPerBooking": 2,
   "resourceClass": "suite",
   "resourceTitle": "Suite",
   "shortCode": null
  }
 ],
 "serviceCode": "nambo",
 "serviceFamily": "accommodation",
 "title": "Nam B\u1ed9 Boutique Hotel",
 "variants": [
  {
   "axes": [],
   "onSale": true,
   "title": "Nam B\u1ed9 Boutique Hotel",
   "variantId": "standard"
  }
 ]
}
#220 2026-09-07T18:13:03+00:00 GET https://api.transmekong.com/v1/services → 200 140 ms
> Accept: application/json
> User-Agent: api-client/0.1.0 (+https://client.bassac.vn)
< server: openresty
< date: Mon, 07 Sep 2026 18:13:03 GMT
< content-type: application/json; charset=utf-8
< transfer-encoding: chunked
< connection: keep-alive
< strict-transport-security: max-age=0, max-age=63072000; preload
< access-control-allow-origin: *
< access-control-allow-methods: GET, POST, OPTIONS
< access-control-allow-headers: Authorization, Content-Type, Octo-Capabilities
< access-control-expose-headers: Octo-Capabilities
< access-control-max-age: 86400
< content-encoding: gzip
< vary: Accept-Encoding
< x-turbo-charged-by: LiteSpeed
< x-served-by: api.transmekong.com

{
 "services": [
  {
   "ageGroups": [
    {
     "ageFrom": 0,
     "ageTo": 4,
     "id": "infant",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 4,
     "id": "child",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 120,
     "id": "adult",
     "level": "family"
    }
   ],
   "compositions": [
    {
     "adults": 1,
     "children": 0,
     "id": "junior-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "junior-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "junior-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "junior-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 2,
     "children": 2,
     "id": "junior-double-2children",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 4,
     "children": 0,
     "id": "junior-quad",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "junior"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "main-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "main-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "main-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "corner-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "corner"
    }
   ],
   "content": [],
   "counterpart": null,
   "disembarkPlaceId": null,
   "durationMinutes": null,
   "embarkPlaceId": null,
   "embarkTimeLocal": "14:00",
   "exclusivity": "shared",
   "extras": [
    {
     "basis": "per-person",
     "free": false,
     "id": "breakfast",
     "saleMode": "always",
     "title": "Breakfast at the hotel"
    },
    {
     "basis": "per-person",
     "free": false,
     "id": "extra-guest",
     "saleMode": "always",
     "title": "Additional guest / extra bed"
    },
    {
     "basis": "per-booking",
     "free": false,
     "id": "late-checkout",
     "saleMode": "on-request",
     "title": "Late check-out"
    },
    {
     "basis": "per-booking",
     "free": true,
     "id": "cot",
     "saleMode": "on-request",
     "title": "Baby cot"
    }
   ],
   "itinerary": {
    "kind": "route"
   },
   "nights": 1,
   "rules": {
    "booking-grace": {
     "enforced": false,
     "source": "booking-grace",
     "value": {
      "capped_by": "departure",
      "enforced": false,
      "enforced_by": [
       "native-api cancel (Rules::refundFor, 05-Sep-2026)"
      ],
      "from": "booking",
      "hours": 24,
      "overrides": [
       "cut-off",
       "no-show",
       "no-refund plans"
      ],
      "precision": "minute",
      "supplier_charges": "absorbed"
     }
    },
    "cut-off": {
     "enforced": true,
     "source": "cut-off",
     "value": {
      "boundary": "end-of-day",
      "days": 5,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "hold-ttl": {
     "enforced": true,
     "source": "hold-ttl",
     "value": {
      "from": "hold",
      "minutes": 15,
      "then": "confirm re-reads the feed and tells the desk",
      "told": "nobody"
     }
    },
    "no-show": {
     "enforced": true,
     "source": "no-show",
     "value": {
      "boundary": "end-of-day",
      "days": 0,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "refund-tiers": {
     "enforced": true,
     "source": "refund-tiers",
     "value": {
      "anchor": "check-in",
      "bands": [
       {
        "cap_nights": 0.5,
        "id": "early",
        "of": "stay",
        "retained_pct": 5,
        "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
        "until_days": 5
       },
       {
        "id": "partial",
        "of": "night",
        "retained_pct": 50,
        "text": "between 4 days and 48 hours before arrival: 50 % of one night",
        "until_days": 2
       },
       {
        "id": "late",
        "of": "night",
        "retained_pct": 100,
        "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
        "until_days": 0
       },
       {
        "id": "no-show",
        "no_show": true,
        "of": "stay",
        "retained_pct": 100,
        "text": "no-show: the full stay"
       }
      ],
      "boundary": "end-of-day",
      "grace_first": true,
      "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
      "timezone": "Asia/Ho_Chi_Minh"
     }
    }
   },
   "saleTypes": [
    {
     "basis": "per-room",
     "capacity": 4,
     "id": "junior",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "main",
     "inventory": 4,
     "maxUnitsPerBooking": 4,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 2,
     "id": "corner",
     "inventory": 2,
     "maxUnitsPerBooking": 2,
     "resourceClass": "suite",
     "resourceTitle": "Suite",
     "shortCode": null
    }
   ],
   "serviceCode": "nambo",
   "serviceFamily": "accommodation",
   "title": "Nam B\u1ed9 Boutique Hotel",
   "variants": [
    {
     "axes": [],
     "onSale": true,
     "title": "Nam B\u1ed9 Boutique Hotel",
     "variantId": "standard"
    }
   ]
  },
  {
   "ageGroups": [
    {
     "ageFrom": 0,
     "ageTo": 4,
     "id": "infant",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 4,
     "id": "child",
     "level": "family"
    },
    {
     "ageFrom": 5,
     "ageTo": 120,
     "id": "adult",
     "level": "family"
    }
   ],
   "compositions": [
    {
     "adults": 1,
     "children": 0,
     "id": "main-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "main-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "main"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "main-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "main-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "main"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "corner-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "corner-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "corner-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "corner-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 2,
     "children": 2,
     "id": "corner-double-2children",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 4,
     "children": 0,
     "id": "corner-quad",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "corner"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "cozy-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "cozy-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "cozy"
    },
    {
     "adults": 2,
     "children": 1,
     "id": "cozy-double-1child",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 3,
     "children": 0,
     "id": "cozy-triple",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "cozy"
    },
    {
     "adults": 1,
     "children": 0,
     "id": "standard-single",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double",
     "infantMode": null,
     "infants": 0,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double-infant",
     "infantMode": "shared-bed",
     "infants": 1,
     "saleTypeId": "standard"
    },
    {
     "adults": 2,
     "children": 0,
     "id": "standard-double-2infants",
     "infantMode": "shared-bed",
     "infants": 2,
     "saleTypeId": "standard"
    }
   ],
   "content": [],
   "counterpart": null,
   "disembarkPlaceId": null,
   "durationMinutes": null,
   "embarkPlaceId": null,
   "embarkTimeLocal": "14:00",
   "exclusivity": "shared",
   "extras": [
    {
     "basis": "per-person",
     "free": false,
     "id": "breakfast",
     "saleMode": "always",
     "title": "Breakfast at the hotel"
    },
    {
     "basis": "per-person",
     "free": false,
     "id": "extra-guest",
     "saleMode": "always",
     "title": "Additional guest / extra bed"
    },
    {
     "basis": "per-booking",
     "free": false,
     "id": "late-checkout",
     "saleMode": "on-request",
     "title": "Late check-out"
    },
    {
     "basis": "per-booking",
     "free": true,
     "id": "cot",
     "saleMode": "on-request",
     "title": "Baby cot"
    }
   ],
   "itinerary": {
    "kind": "route"
   },
   "nights": 1,
   "rules": {
    "booking-grace": {
     "enforced": false,
     "source": "booking-grace",
     "value": {
      "capped_by": "departure",
      "enforced": false,
      "enforced_by": [
       "native-api cancel (Rules::refundFor, 05-Sep-2026)"
      ],
      "from": "booking",
      "hours": 24,
      "overrides": [
       "cut-off",
       "no-show",
       "no-refund plans"
      ],
      "precision": "minute",
      "supplier_charges": "absorbed"
     }
    },
    "cut-off": {
     "enforced": true,
     "source": "cut-off",
     "value": {
      "boundary": "end-of-day",
      "days": 5,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "hold-ttl": {
     "enforced": true,
     "source": "hold-ttl",
     "value": {
      "from": "hold",
      "minutes": 15,
      "then": "confirm re-reads the feed and tells the desk",
      "told": "nobody"
     }
    },
    "no-show": {
     "enforced": true,
     "source": "no-show",
     "value": {
      "boundary": "end-of-day",
      "days": 0,
      "timezone": "Asia/Ho_Chi_Minh"
     }
    },
    "refund-tiers": {
     "enforced": true,
     "source": "refund-tiers",
     "value": {
      "anchor": "check-in",
      "bands": [
       {
        "cap_nights": 0.5,
        "id": "early",
        "of": "stay",
        "retained_pct": 5,
        "text": "up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night",
        "until_days": 5
       },
       {
        "id": "partial",
        "of": "night",
        "retained_pct": 50,
        "text": "between 4 days and 48 hours before arrival: 50 % of one night",
        "until_days": 2
       },
       {
        "id": "late",
        "of": "night",
        "retained_pct": 100,
        "text": "less than 48 hours before arrival, or after check-in: 100 % of one night",
        "until_days": 0
       },
       {
        "id": "no-show",
        "no_show": true,
        "of": "stay",
        "retained_pct": 100,
        "text": "no-show: the full stay"
       }
      ],
      "boundary": "end-of-day",
      "grace_first": true,
      "norefund_plans": "a rate plan replaces the whole ladder with no-amend, no-refund (F3 \u00a75) \u2014 the grace still overrides it",
      "timezone": "Asia/Ho_Chi_Minh"
     }
    }
   },
   "saleTypes": [
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "main",
     "inventory": 2,
     "maxUnitsPerBooking": 2,
     "resourceClass": "flat",
     "resourceTitle": "Main Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 4,
     "id": "corner",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "flat",
     "resourceTitle": "River Front Corner Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 3,
     "id": "cozy",
     "inventory": 0,
     "maxUnitsPerBooking": 0,
     "resourceClass": "flat",
     "resourceTitle": "River Front Cozy Suite",
     "shortCode": null
    },
    {
     "basis": "per-room",
     "capacity": 2,
     "id": "standard",
     "inventory": 1,
     "maxUnitsPerBooking": 1,
     "resourceClass": "flat",
     "resourceTitle": "Standard room #22",
     "shortCode": null
    }
   ],
   "serviceCode": "lighthouse",
   "serviceFamily": "accommodation",
   "title": "the Lighthouse",
   "variants": [
    {
     "axes": [],
     "onSale": true,
     "title": "the Lighthouse",
     "variantId": "standard"
    }
   ]
  }
 ]
}